如何以编程方式区分在内存的堆和堆栈部分创建的对象 假设我想跟踪C++程序中创建的所有对象。< /P> 在内存的堆栈部分(objectobj;) 在内存的堆部分(使用new动态分配)

如何以编程方式区分在内存的堆和堆栈部分创建的对象 假设我想跟踪C++程序中创建的所有对象。< /P> 在内存的堆栈部分(objectobj;) 在内存的堆部分(使用new动态分配),c++,object,heap-memory,stack-memory,C++,Object,Heap Memory,Stack Memory,有没有办法知道堆栈中有多少对象,堆内存中有多少对象?在这两种情况下都将调用构造函数,因此它没有帮助。请参阅: 特别是: “当 创建线程。通常由语言运行库调用操作系统 为应用程序分配堆。“ 而且 …而堆栈在进程启动时由操作系统分配 (假设存在操作系统),它由 程序这也是堆栈速度更快的另一个原因——推送 pop操作通常是一种机器指令,而且是现代的 机器可以在一个周期内至少完成其中的3个,而 释放堆涉及调用操作系统代码 因此,我相信您的问题的答案是,您需要对操作系统的内部内存分页系统进行完全根访问,

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

请参阅:

特别是:

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

而且

…而堆栈在进程启动时由操作系统分配 (假设存在操作系统),它由 程序这也是堆栈速度更快的另一个原因——推送 pop操作通常是一种机器指令,而且是现代的 机器可以在一个周期内至少完成其中的3个,而 释放堆涉及调用操作系统代码


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

为什么要标记或?所有对象都是在堆中创建的(至少对于Java)[标准] C++没有提供任何方法来区分堆堆上创建的对象。对象不应该被关心。@ CalOxHubger--如果方法被优化(JVM实现),我不认为这是可靠的。这个对象并没有逃脱这个方法。但是问题反复询问C++,java标签是错误的,所以……-听起来像XY问题。请描述你想要达到的目标。