C++ 大型C/C的内存快照++;项目(Windows/Unix)

C++ 大型C/C的内存快照++;项目(Windows/Unix),c++,c,memory,C++,C,Memory,我正在尝试对运行在Unix/Windows上的大型应用程序使用的内存进行快照。我的最终目标是制作一种图表,将代码的哪个区域所使用的内存进行分解 该程序分为大约30个不同的项目,其中大多数是静态库或动态DLL。其中有些是用C编写的,有些是C++的,有些则是两个的混合。所有项目的代码总计约为600000行 使用heap,我可以尝试在所有项目中重载每个“malloc/free”和“new/delete”,并以这种方式跟踪它,但对于这样一个大小的应用程序来说,这是非常令人畏惧的 而且,这也不会收集到散落

我正在尝试对运行在Unix/Windows上的大型应用程序使用的内存进行快照。我的最终目标是制作一种图表,将代码的哪个区域所使用的内存进行分解

该程序分为大约30个不同的项目,其中大多数是静态库或动态DLL。其中有些是用C编写的,有些是C++的,有些则是两个的混合。所有项目的代码总计约为600000行

使用heap,我可以尝试在所有项目中重载每个“malloc/free”和“new/delete”,并以这种方式跟踪它,但对于这样一个大小的应用程序来说,这是非常令人畏惧的

而且,这也不会收集到散落在项目周围的所有静态全局数据


感谢您的帮助。

如果您正在使用ELF二进制文件,您可以在与ELF分析器链接之前检查目标文件“*.o”,查看静态内存部分有多大以及bss(未初始化的静态数据)加载后的大小。

您可以试一试。 以下是关于其中一个工具的引用:

山丘

Massif是一个堆分析器。它通过获取程序堆的常规快照来执行详细的堆分析。它生成一个图表,显示一段时间内堆的使用情况,包括程序中负责内存分配最多的部分的信息。图形由文本或HTML文件补充,该文件包含更多信息,用于确定分配的内存最多的位置。Massif运行程序的速度比正常速度慢20倍左右

它现在支持Linux,但是如果在Linux上进行分析并将结果应用到Windows版本,这可能会对您有所帮助