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

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

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

有什么办法可以知道堆栈中有多少个对象,堆内存中有多少个对象?在这两种情况下都将调用构造函数,因此无济于事。

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

请参阅: What and where are the stack and heap?

尤其是:

  

“当操作系统执行以下操作时,操作系统会为每个系统级线程分配堆栈:   线程已创建。通常,操作系统由语言运行时调用   为应用程序分配堆。”

和...

  

...而进程启动时操作系统分配堆栈   (假设存在一个操作系统),则由   程序。这也是堆栈更快的另一个原因-推送   和弹出操作通常是一种机器指令,现代   机器在一周期中至少可以执行其中3项,而分配或   释放堆涉及调用OS代码。

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

本文链接:https://www.f2er.com/3115447.html

大家都在问