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