如何configuration内存使用情况?

我知道Valgrind,但它只是检测内存pipe理问题。 我正在search的是一个工具,它给了我一个概述,我的程序的哪些部分消耗多less内存。 例如树形图(如KCachegrind为Callgrind所做的)的graphics表示将很酷。

我在一台Linux机器上工作,所以Windows工具不会帮助我很多。

使用地块 ,这是Valgrind工具的一部分。 massif-visualizer可以帮助你绘制数据,或者你可以使用ms_print命令。

gprof是使用GCC的标准方法。 编译器已经支持它。 您需要额外的努力来获得“图形”树视图,但是您可以非常容易地获得文本树视图报告。

试用Google提供的带有gperftools的堆分析器 。 我一直从源头上构建它,但是它可以在几个Linux发行版中作为预编译包提供。

这与将动态库链接到可执行文件并运行该程序一样简单。 它收集有关每个动态内存分配的信息(就我所见),并在每次发生以下任一情况时将内存转储保存到磁盘:

  • HEAP_PROFILE_ALLOCATION_INTERVAL字节已被程序分配(默认:1Gb)
  • 高内存使用率标记增加HEAP_PROFILE_INUSE_INTERVAL字节(默认值:100Mb)
  • HEAP_PROFILE_TIME_INTERVAL秒已过(默认值:不活动)
  • 你明确地调用你的代码中的HeapProfilerDump()

根据我的经验,最后一个是最有用的,因为您可以准确控制何时获取堆使用情况的快照,然后比较两个不同的快照并查看出了什么问题。

最终,有几种可能的输出格式,如文本或图形(以有向图的形式):

内存使用情况图

使用这个工具,我已经能够发现我使用Massif找不到的不正确的内存使用情况。