C++ 如何分析内存使用情况?

C++ 如何分析内存使用情况?,c++,linux,memory,profiler,valgrind,C++,Linux,Memory,Profiler,Valgrind,我知道Valgrind,但它只是检测内存管理问题。我正在搜索的是一个工具,它可以给我一个概览,我的程序的哪些部分消耗了多少内存。使用树图等图形表示(就像KCachegrind对Callgrind所做的那样)会很酷 我在Linux机器上工作,所以windows工具对我帮助不大。使用,这是Valgrind工具的一部分。可以帮助您绘制数据图表,也可以使用ms\u print命令。试试谷歌提供的。我总是从源代码构建它,但它在几个Linux发行版下都是可用的 它的使用就像将动态库链接到可执行文件并运行程序

我知道Valgrind,但它只是检测内存管理问题。我正在搜索的是一个工具,它可以给我一个概览,我的程序的哪些部分消耗了多少内存。使用树图等图形表示(就像KCachegrind对Callgrind所做的那样)会很酷

我在Linux机器上工作,所以windows工具对我帮助不大。

使用,这是Valgrind工具的一部分。可以帮助您绘制数据图表,也可以使用
ms\u print
命令。

试试谷歌提供的。我总是从源代码构建它,但它在几个Linux发行版下都是可用的

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

  • HEAP\u PROFILE\u ALLOCATION\u INTERVAL
    程序已分配字节(默认值:1Gb)
  • 高位内存使用标记增加
    HEAP\u PROFILE\u INUSE\u INTERVAL
    字节(默认值:100Mb)
  • HEAP\u PROFILE\u TIME\u INTERVAL
    已过秒(默认值:非活动)
  • 从代码中显式调用
    HeapProfilerDump()
根据我的经验,最后一个是最有用的,因为您可以精确地控制何时创建堆使用情况的快照,然后比较两个不同的快照,看看哪里出了问题

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

使用此工具,我能够发现使用Massif无法找到的错误内存使用情况。

一个“较新”的选项是。与massif相反,它是一个插入指令的
malloc
/
free
版本,用于存储所有调用并转储日志


GUI很好(但需要Qt5 IIRC),结果计时(因为您可能也想跟踪时间)比valgrind的偏差更小(因为它们不是模拟的)。

将callgrind选项与valgrind一起使用

谢谢,屏幕截图看起来非常棒。。。,我想这是我一直想要的。在CentOS 7上构建massif visualizer有点痛苦,但它是值得的。据我所知,我认为这个答案也应该注意(如果应用程序是静态链接的,“Valgrind”系列工具将不起作用):也可以作为dpkg:sudo apt install massif Visualizer提供。这似乎不支持MPI程序。您好,callgrind是一个不错的工具,但它应该用于其他目的。可能您指的是massif()?