使用Massif运行Valgrind程序与(out)运行程序的结果不同

问题描述 投票:1回答:1

我正在为学校项目创建一个性能驱动的程序,因此,我想我会分析我的程序的内存使用情况。

为此,我使用了Valgrind,无论是否使用Massif工具。使用每个测试的结果如下:

运行valgrind --leak-check=full -v ./main给了我上面的输出。好吧,得到它,总共大约67MB的堆使用量,对吧?

enter image description here

enter image description here

但后来我想知道我的程序在运行时分配了多少内存,所以我做了一些挖掘并找到了Massif工具,它就是这样做的。

因此,我运行valgrind --tool=massif ./main,然后是ms_print massif.out.<pid>,其中<pid>是执行我的程序的现在死进程的进程ID。这为我提供了上面两张图片中显示的输出。

所以我的问题是,如何将总堆使用量提高到67MB左右,而Massif表示它在某一点达到峰值109.9MB?

valgrind heap-memory massif
1个回答
1
投票

Massif为分配的字节数提供2个数字:

  • 程序分配的字节“逻辑数”。
  • “开销”

程序分配的每个块意味着一定的开销,例如由于对齐/填充。在快照列表中,有用堆列(B)显示了程序请求的内容。额外堆(B)显示开销。

109MB是有用的+额外堆。

您可以使用--heap-admin = size调整开销

© www.soinside.com 2019 - 2024. All rights reserved.