如何为分层结构确定某些东西存储在内存中的位置
How to determine where something is stored in memory for layered structure
我正在处理一个赋值,该赋值涉及到事物位于内存,静态,堆栈或堆中的位置。我了解基本知识,但被以下问题弄糊涂了:
存储在c++字符串对象中的字符,如果该对象是类的公共成员函数的局部变量。
我对如何确定在内存中存储这样一个字符感到困惑。我期望将函数的激活记录推入堆栈,然后字符串是该激活记录的一部分,因此相关字符也在堆栈上。这是正确的吗?
是否有一个通用的方法来处理这个问题?我是否应该关心所有的外层,或者是否有一种方法可以充分推断出某些东西存储在内存中的位置,而无需关心代码中存储位置的所有细微差别?
不一定。如果在堆栈上声明一个std::string
(比如作为一个局部变量),那么它的所有成员变量都位于堆栈上。它的成员变量可能包括一个长度字段和一个指向字符数组的指针。(这取决于标准库的实现:标准没有确切定义std::string
必须具有哪些私有成员。)
字符本身不在堆栈中。std::string
使用new
动态分配内存,因此字符数据在堆上。
相关文章:
- 将字符串存储在c++中的稳定内存中
- 类型总是使用其大小存储在内存中吗
- 使用无符号字符数组有效存储内存
- 具有内存顺序的原子负载存储
- CertGetCertificateChain 具有支持的内存存储和证书信任列表
- 为什么 bool 和 _Bool 如果它们在内存中占用 1 个字节,它们只能存储 0 或 1
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 存储在哪个内存段(代码/数据段)类(员工)中?
- 可用存储空间会消耗更多剩余内存吗?
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- 将数据存储在内存中以供以后访问
- 英特尔将指令存储在重叠的内存区域
- 整数数据如何以位为单位存储在内存中?不是右对齐吗?
- std::set 是否将对象连续存储在内存中?
- 原子加载和存储与内存顺序放宽
- 我应该以字符形式存储数字以节省内存吗?
- std::unordered_set 中的元素如何存储在C++内存中?
- 是否可以更早地销毁对象,使其存储内存被后续对象重用
- SSE加载/存储内存事务
- 在类- c++中存储内存内容