我知道Valgrind,但它只是检测内存管理问题。我正在搜索的是一个工具,它给了我一个概述,我的程序的哪些部分确实消耗了多少内存。例如,图形表示树图(就像KCachegrind为Callgrind所做的那样)会很酷。
我正在使用Linux机器,因此Windows工具对我没什么帮助。
答案 0 :(得分:32)
使用massif,这是Valgrind工具的一部分。 massif-visualizer可以帮助您绘制数据图表,也可以使用ms_print
命令。
答案 1 :(得分:7)
尝试Google提供的heap profiler gperftools。我总是从源代码构建它,但它可以在几个Linux发行版下以precompiled package的形式提供。
将动态库链接到可执行文件并运行程序非常简单。它收集有关每个动态内存分配的信息(据我所见),并在每次发生以下任何一种情况时将内存转储保存到磁盘:
HEAP_PROFILE_ALLOCATION_INTERVAL
个字节(默认值:1Gb)HEAP_PROFILE_INUSE_INTERVAL
个字节(默认值:100Mb)HEAP_PROFILE_TIME_INTERVAL
秒已过(默认值:无效)HeapProfilerDump()
根据我的经验,最后一个是最有用的,因为您可以准确控制何时获取堆使用情况的快照,然后比较两个不同的快照,看看有什么错误
最终,有几种可能的输出格式,如文本或图形(以有向图的形式):
使用此工具,我能够发现使用Massif无法找到的不正确的内存使用情况。
答案 2 :(得分:0)
“较新”选项为HeapTrack。与massif相反,它是malloc
/ free
的工具版本,可存储所有调用并转储日志。
GUI很好(但是需要Qt5 IIRC),并且结果计时(因为您可能还想跟踪时间)比valgrind的偏差小(因为它们没有被仿真)。
答案 3 :(得分:-2)
在valgrind中使用callgrind选项