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

标签 c++ memory heap-memory stack-memory

我正在处理一项作业,该作业涉及内存、静态、堆栈或堆中的位置。我了解基础知识,但对以下问题感到困惑:

如果对象是类的公共(public)成员函数的局部变量,则存储在 C++ 字符串对象中的字符。

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

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

最佳答案

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

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

关于c++ - 如何确定某些东西在分层结构的内存中的存储位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22639323/

相关文章:

c++ - 具有构造函数类型转换和转换运算符的转换序列

c++ - 如果我定义带有非常量参数的复制构造函数和 operator= ,我仍然会得到默认的复制构造函数和 operator= 吗?

c++ - 在内存管理中调用有效的构造函数

c++ - 线程分配的内存块是否与线程本身具有相同的亲缘关系,直到线程退出?

objective-c - 使用 ARC 的神秘 CoreImage 内存泄漏

c++ - 如何仅将矩阵的一维分配给 C++ 中的简单数组

java - 错误 : Could not find or load main class –Xmx1G

java - Java 程序如何跟踪其运行期间使用的最大实际堆大小?

C++堆组织——哪种数据结构?

c++ - 函数的堆栈分配