假设我想跟踪在C ++程序中创建的所有对象。
- 在内存的堆栈部分(
Object obj;
) - 在内存的堆部分(使用
new
进行动态分配)
有什么办法可以知道堆栈中有多少个对象,堆内存中有多少个对象?在这两种情况下都将调用构造函数,因此无济于事。
假设我想跟踪在C ++程序中创建的所有对象。
Object obj;
)new
进行动态分配)有什么办法可以知道堆栈中有多少个对象,堆内存中有多少个对象?在这两种情况下都将调用构造函数,因此无济于事。
请参阅: What and where are the stack and heap?
尤其是:
“当操作系统执行以下操作时,操作系统会为每个系统级线程分配堆栈: 线程已创建。通常,操作系统由语言运行时调用 为应用程序分配堆。”
和...
...而进程启动时操作系统分配堆栈 (假设存在一个操作系统),则由 程序。这也是堆栈更快的另一个原因-推送 和弹出操作通常是一种机器指令,现代 机器在一周期中至少可以执行其中3项,而分配或 释放堆涉及调用OS代码。
因此,我相信您的问题的答案是,您需要对操作系统的内部内存分页系统的完全root访问权,以跟踪所有对象(尤其是堆上的对象)。据我所知,所有垃圾收集系统都使用引用计数方法来管理堆内存分配,并且不直接访问操作系统的堆分配记录。我敢肯定有很好的安全原因。