如何以编程方式区分在内存的堆和堆栈部分创建的对象
How to programmatically differentiate objects created on heap and stack section of memory
假设我想跟踪在C++程序中创建的所有对象。
- 在内存的堆栈部分(
Object obj;
( - 内存的堆内部分(使用
new
进行动态分配(
有没有办法知道堆栈中有多少对象,堆内存中有多少?构造函数在这两种情况下都会被调用,所以它没有帮助。
请参阅:堆栈和堆在什么地方?
特别是:
"当创建线程。操作系统通常由语言运行库调用为应用程序分配堆。">
和。。。
。。。当进程开始时,堆栈由OS分配(假设存在操作系统(,它由程序这也是堆栈更快的另一个原因——push和pop操作通常是一条机器指令,而现代机器可以在一个周期内完成至少3个任务,而分配或释放堆涉及到对操作系统代码的调用。
因此,我相信您的问题的答案是,您需要对操作系统的内部内存分页系统进行完全的root访问,以跟踪所有对象(尤其是堆上的对象(。据我所知,所有垃圾收集系统都使用引用计数方法来管理堆内存分配,并且不直接访问操作系统的堆分配记录。我相信这有很好的安全理由。
相关文章:
- C++ 在堆栈中包含多态属性的类对象存储
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- C++ 对象数组堆栈溢出
- 作为指针注入类后重新创建堆栈对象不好吗?
- C++包装库:在堆栈上分配C++ C 中的对象
- 对象接收堆栈溢出异常 c++ 的排序向量
- C++析构函数调用两次,堆栈分配的复合对象
- 我正在尝试使用递归来反转堆栈.函数 fun() 中传递了什么?s 是类堆栈的对象
- C++ 中的黑白堆分配对象和堆栈分配对象的性能差异
- 用于堆栈分配对象的C++虚拟析构函数内联
- 使用堆栈存储对象
- 将地址存储到矢量中的堆栈分配对象
- C++中基于堆栈的对象如何在内部调用不同的类方法
- 将引用分配给新创建的堆栈分配对象时会发生什么
- 用XNAMATH优化了堆栈分配对象
- std::vectors中的vector取消分配其shared_ptr内容(堆栈实体对象的使用不正确?)
- WrapperPointer类和c++中堆栈分配对象的释放
- 删除std::lock_guard相对于其他堆栈分配对象的顺序/速度
- 指向堆栈分配对象的指针和引用