我正在尝试拍摄在Unix/Windows上运行的大型应用程序所使用的内存的快照.我的最终目标是使用一种图表来分解代码区域所使用的内存.
该程序分为大约30个不同的项目,其中大多数是静态库或动态dll.其中一些是用C语言编写的,有些是C++语言,有些则是两者的混合.总的来说,所有项目的代码大约是600,000行.
使用堆我可以尝试在所有项目中重载每个'malloc/free'和'new/delete'并以这种方式跟踪它,但对于这么大的应用程序来说这是相当令人生畏的.
此外,这也不会获取项目周围散布的所有静态全局数据.
谢谢你的帮助.
你可以试试valgrind.以下是关于其中一个工具的引用:
断层块
Massif是一个堆分析器.它通过获取程序堆的常规快照来执行详细的堆分析.它生成一个图表,显示随时间变化的堆使用情况,包括有关程序的哪些部分负责大多数内存分配的信息.该图由文本或HTML文件补充,该文件包含用于确定分配最多内存的位置的更多信息.Massif运行程序比正常情况慢约20倍.
它现在支持Linux,但如果在Linux上进行分析并将结果应用到Windows版本对您有用,这可能对您有所帮助.