来自 运行 程序的不同结果与 Valgrind with(out) using Massif

Different results from running program with Valgrind with(out) using Massif

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

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

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

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

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

所以我的问题是,为什么总堆使用量约为 67MB,但 Massif 说它在某个时刻达到了 109.9MB 的峰值?

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

  • 您的程序分配的 "logical number" 个字节。
  • "overhead"

您的程序分配的每个块都意味着一定的开销,例如由于 alignment/padding。 在快照列表中,列 useful-heap(B) 显示了您的程序 已请求。 extra-heap(B) 显示开销。

109MB 是有用的 + 额外的堆。

您可以使用 --heap-admin=size

调整开销