来自 运行 程序的不同结果与 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
调整开销
我正在为一个学校项目创建一个性能驱动的程序,因此,我想我应该分析一下我的程序的内存使用情况。
为此,我使用了 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
调整开销