我正在处理一项作业,该作业涉及内存、静态、堆栈或堆中的位置。我了解基础知识,但对以下问题感到困惑:
如果对象是类的公共(public)成员函数的局部变量,则存储在 C++ 字符串对象中的字符。
我对如何确定这样一个字符在内存中的存储位置感到困惑。我希望将函数的激活记录推送到堆栈,然后字符串是该激活记录的一部分,因此关联的字符也在堆栈上。它是否正确?
是否有通用的方法来解决这个问题?我是否应该关心所有的外层,或者是否有一种方法可以充分推断出某些东西在内存中的存储位置,而不用担心它在代码中存储位置的所有细微差别?
最佳答案
不一定。如果您在堆栈上声明一个 std::string
(例如作为局部变量),那么它的所有成员变量 都位于堆栈上。它的成员变量可能包括一个长度字段和一个指向字符数组的指针。 (这取决于标准库的实现:该标准并未准确定义 std::string
必须具有的私有(private)成员。)
不过,字符本身不在堆栈中。 std::string
使用 new
动态分配其内存,因此字符数据在堆上。
关于c++ - 如何确定某些东西在分层结构的内存中的存储位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22639323/