如何以编程方式区分在内存的堆和堆栈部分创建的对象

How to programmatically differentiate objects created on heap and stack section of memory

本文关键字:堆栈部 对象 创建 编程 方式区 内存      更新时间:2023-10-16

假设我想跟踪在C++程序中创建的所有对象。

  1. 在内存的堆栈部分(Object obj;(
  2. 内存的堆内部分(使用new进行动态分配(

有没有办法知道堆栈中有多少对象,堆内存中有多少?构造函数在这两种情况下都会被调用,所以它没有帮助。

请参阅:堆栈和堆在什么地方?

特别是:

"当创建线程。操作系统通常由语言运行库调用为应用程序分配堆。">

和。。。

。。。当进程开始时,堆栈由OS分配(假设存在操作系统(,它由程序这也是堆栈更快的另一个原因——push和pop操作通常是一条机器指令,而现代机器可以在一个周期内完成至少3个任务,而分配或释放堆涉及到对操作系统代码的调用。

因此,我相信您的问题的答案是,您需要对操作系统的内部内存分页系统进行完全的root访问,以跟踪所有对象(尤其是堆上的对象(。据我所知,所有垃圾收集系统都使用引用计数方法来管理堆内存分配,并且不直接访问操作系统的堆分配记录。我相信这有很好的安全理由。