我正在为学校项目创建一个性能驱动的程序,因此,我想我会分析我的程序的内存使用情况。
为此,我使用了Valgrind,无论是否使用Massif工具。使用每个测试的结果如下:
运行valgrind --leak-check=full -v ./main
给了我上面的输出。好吧,得到它,总共大约67MB的堆使用量,对吧?
但后来我想知道我的程序在运行时分配了多少内存,所以我做了一些挖掘并找到了Massif工具,它就是这样做的。
因此,我运行valgrind --tool=massif ./main
,然后是ms_print massif.out.<pid>
,其中<pid>
是执行我的程序的现在死进程的进程ID。这为我提供了上面两张图片中显示的输出。
所以我的问题是,如何将总堆使用量提高到67MB左右,而Massif表示它在某一点达到峰值109.9MB?
Massif为分配的字节数提供2个数字:
程序分配的每个块意味着一定的开销,例如由于对齐/填充。在快照列表中,有用堆列(B)显示了程序请求的内容。额外堆(B)显示开销。
109MB是有用的+额外堆。
您可以使用--heap-admin = size调整开销