枚举已分配的对象

时间:2014-03-27 14:01:45

标签: c++ memory low-level-code

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

我需要这个才能找到内存泄漏。

平台:Linux,gcc,i386,AMD_K64(更好:独立于平台)

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

3 个答案:

答案 0 :(得分:0)

您始终可以使用valgrind来检查内存泄漏。可以使用软件包管理器安装它,也可以从http://valgrind.org/

下载和编译

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

  1. 已分配的内存,但不再从任何地方引用...因此无法删除它。这是正确泄漏。在Linux中,选择的主要工具是valgrind。 Valgrind是一个多工具的框架。您将使用的工具是memcheck ....这是一个动态分析工具,将报告泄漏和其他内存问题。这比列举分配的内存更进一步,但它还需要检查它是否仍然被引用。
  2. 分配的内存仍然被引用,但不知怎的,你已经忘记了它(例如,矢量无休止地增长,因为没有人永远不会从中移除它们)。在这里,您需要一个工具来告诉您已分配的所有内存的组成。 valgrind再次帮助你。这次的工具称为massif
  3. 我确信还有更多工具。这些很受欢迎。

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