在堆对象的上下文中理解堆栈
Understanding the stack in the context of heap objects
使用下面的简单代码。d
是堆栈上指向堆上demo
对象的指针。该对象包含val
。在类的上下文中,这似乎是一个堆栈变量,但对象是在堆上分配的。那么val
到底在哪里呢?
class demo
{
int val;
public:
demo() : val(5) {};
};
demo* d = new demo();
val
位于堆上,因为它是位于堆上的对象的一部分。每个线程都有自己的堆栈,但单个对象没有。只有在静态声明d
的情况下,val
才会位于堆栈上。
无论对象存储在堆栈或堆上,val
始终与demo对象的第一个成员位于同一内存地址。
§1.8.6
除非对象是位字段或大小为零的基类子对象,否则该对象的地址是它所占用的第一个字节的地址。既不是位字段也不是大小为零的基类子对象的两个不同对象应具有不同的地址。
相关文章:
- #为""定义宏;静态";针对不同的上下文
- 与互斥锁相比,旋转锁可以保证上下文切换
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- 算法问题:查找从堆栈中弹出的所有序列
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- 为什么调用堆栈数组会导致内存泄漏
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 错误"Could not find Boost"(缺少:上下文标头)
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- 堆栈和队列是否像C++中的数组一样传递?
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 从堆栈分配的原始指针构造智能指针
- 中止的xbegin事务是否还原xbegin启动时存在的堆栈上下文
- 有什么方法可以将我从getcontext()中获得的上下文堆栈分开