我知道Valgrind,但它只是检测内存管理问题。我所搜索的是一个工具,它给了我一个概述,我的程序的哪些部分会消耗多少内存。用例如图形表示一个树形图(就像KCachegrind为Callgrind所做的那样)会很酷。如何分析内存使用情况?
我正在一台Linux机器上工作,所以windows工具对我无能为力。
我知道Valgrind,但它只是检测内存管理问题。我所搜索的是一个工具,它给了我一个概述,我的程序的哪些部分会消耗多少内存。用例如图形表示一个树形图(就像KCachegrind为Callgrind所做的那样)会很酷。如何分析内存使用情况?
我正在一台Linux机器上工作,所以windows工具对我无能为力。
使用massif,它是Valgrind工具的一部分。 massif-visualizer可以帮助您绘制数据图表,或者您可以使用ms_print
命令。
尝试使用gperftools由Google提供的heap profiler。我一直都是从源头上构建它的,但它在几个Linux发行版下作为precompiled package提供。
这与将动态库链接到可执行文件并运行该程序一样简单。它(据我见过的)收集关于每个动态内存分配的信息,并保存到磁盘每次出现以下情况之一一内存转储:
HEAP_PROFILE_ALLOCATION_INTERVAL
字节已被该程序分配(默认:1GB)HEAP_PROFILE_INUSE_INTERVAL
字节(默认值增加:100兆)HEAP_PROFILE_TIME_INTERVAL
秒后(默认:激活)HeapProfilerDump()
从您的代码最后一个,在我的经验,是最有用的,因为你可以控制什么时候有堆使用的快照,然后比较两个不同的快照,看看有什么不对。
最终,有几个可能的输出格式,比如文本或图形(在一个有向图的形式):
使用该工具我已经能够发现不正确存储器使用量即我找不到使用Massif。
谢谢,截图看起来非常棒...,我想这就是我一直想要的。 – math 2011-01-14 12:45:29