0

如何在 C++ 中枚举所有已分配的对象(由 new 运算符分配)(不仅是那些有自己的内存映射的对象,还有那些在堆上的对象?)?

我需要这个来查找内存泄漏。

平台:Linux、gcc、i386、AMD_K64(更好:平台无关)

可能没有正式的方法,但可能有一个精益的解决方法。例如,是否有一些您可以访问的内部变量?也许指向用于管理堆的列表的指针?

4

3 回答 3

0

你总是可以使用 valgrind 来检查内存泄漏。要么用你的包管理器安装它,要么只下载和编译:http: //valgrind.org/

如果您在调试模式下编译应用程序,它可以精确定位到您分配了未释放/删除的资源的文件/行。

于 2014-03-27T14:04:44.853 回答
0

您可以使用valgrind它完全符合您的要求(用它自己的实现替换 malloc)并计算分配/释放

于 2014-03-27T14:04:54.090 回答
0

可能有两种形式的记忆丧失

  1. 已分配的内存,但不再从任何地方引用...因此无法删除它。这是一个适当的泄漏。在 Linux 中,选择的主要工具是valgrind。Valgrind 是一个适用于多种工具的框架。您将使用的工具是memcheck ...。这是一个动态分析工具,可以报告泄漏和其他内存问题。这比枚举分配的内存更进一步,但它还需要检查它是否仍然被引用。
  2. 已分配且仍被引用的内存,但不知何故您已经忘记了它(例如,由于没有人从它们中删除而无休止地增长的向量)。这是您需要一个工具来告诉您已分配的所有内存的组成的地方。同样 valgrind 可以在这里为您提供帮助。这次的工具叫做massif

我敢肯定还有更多的工具。这些很受欢迎。

在 Solaris 中,我建议使用 libumem 进行泄漏跟踪,并在 Sun 的 Studio 中进行分析器进行分析和内存分析。

于 2014-03-27T14:12:25.750 回答