5.3.3. 使用 Massif 查看堆和栈空间配置
Massif 使用指定的程序测量堆 空间,包括有用空间以及用于记录和对齐而分配的额外空间。它可以帮助您减少程序使用的内存量,增加程序速度,并减少程序耗尽机器 swap 空间的可能性。Massif 还可以提供有关您程序用来分配堆 内存的部分的详情。使用 Massif 运行的程序的运行速度比其一般执行速度慢 20 倍。
要给出程序堆 用量信息,请将
massif
指定为您要使用的 Valgrind 工具:
# valgrind --tool=massif program
Massif 收集的配置数据会写入一个文件,默认为
massif.out.pid
,其中 pid 是指定的 program 的进程 ID。
还可以使用
ms_print
命令绘制配置数据图,比如:
# ms_print massif.out.pid
这样可以生成显示程序执行期间内存消耗的图表,以及有关在程序中不同点进行分配的地点详情,其中包括峰值内存分配点。
Massif 提供大量命令行选项可用于该工具的直接输出结果。这些可用选项包括:
--heap
- 指定是否执行堆 分析。默认值为
yes
。将此选项设定为no
即可禁用堆 分析。 --heap-admin
- 指定启用堆 分析时每个块用于管理的字节数。默认每个块有
8
字节。 --stacks
- 指定是否执行栈分析。默认值为
no
(禁用)。要启用栈分析,请将这个选项设定为yes
,但请注意这样做会极大降低 Massif 速度。另外还要注意 Massif 假设开始时主栈大小为 0 以便更好的显示要分析的程序的栈所控制的比例。 --time-unit
- 指定用来分析的时间单位。这个选项三个有效值:执行的指令(
i
),即默认值,用于大多数情况;即时(ms
,单位毫秒),可用于某些特定事务;以及在堆(/或者)栈中分配/取消分配的字节(B
),用于很少运行的程序,且用于测试目的,因为它最容易在不同机器中重现。这个选项在使用ms_print
输出结果画图是游泳。
选项完整列表请参考
/usr/share/doc/valgrind-version/valgrind_manual.pdf
中的文档。