如何为分层结构确定某些东西存储在内存中的位置

How to determine where something is stored in memory for layered structure

本文关键字:存储 内存 位置 分层 结构      更新时间:2023-10-16

我正在处理一个赋值,该赋值涉及到事物位于内存,静态,堆栈或堆中的位置。我了解基本知识,但被以下问题弄糊涂了:

存储在c++字符串对象中的字符,如果该对象是类的公共成员函数的局部变量。

我对如何确定在内存中存储这样一个字符感到困惑。我期望将函数的激活记录推入堆栈,然后字符串是该激活记录的一部分,因此相关字符也在堆栈上。这是正确的吗?

是否有一个通用的方法来处理这个问题?我是否应该关心所有的外层,或者是否有一种方法可以充分推断出某些东西存储在内存中的位置,而无需关心代码中存储位置的所有细微差别?

不一定。如果在堆栈上声明一个std::string(比如作为一个局部变量),那么它的所有成员变量都位于堆栈上。它的成员变量可能包括一个长度字段和一个指向字符数组的指针。(这取决于标准库的实现:标准没有确切定义std::string必须具有哪些私有成员。)

但是,

字符本身不在堆栈中。std::string使用new动态分配内存,因此字符数据在堆上。