我看到massif可以测量堆使用情况,并且还可以使用某些选项进行堆栈使用。它是否还报告全局数据消耗(定义为全局或静态变量的数据)?
答案 0 :(得分:1)
它是否还报告全局数据消耗(定义为全局或静态变量的数据)?
不,Massif是只有堆的工具,并不测量.data和.bss部分,而是直接mmap-ed内存(但它可以测量用于存储一些局部变量的堆栈,并且alloca
) :
http://valgrind.org/docs/manual/ms-manual.html
Massif是一个堆分析器。它测量程序使用的堆内存量。这包括有用空间和为记账和对齐目的分配的额外字节。它还可以测量程序堆栈的大小,但默认情况下不会这样做。 ...
9.2.8。测量过程中的所有内存
值得强调的是,默认情况下,Massif仅测量堆内存,即分配有
malloc
,calloc
,realloc
,memalign
,new
的内存,new[]
以及其他一些类似的功能。 (当然,它可以选择性地测量堆栈内存。)这意味着它不会直接测量使用较低级别系统调用分配的内存,例如mmap
,mremap
和brk
。 ...
--stacks=<yes|no> [default: no]
指定是否应该进行堆栈分析。此选项大大减慢了Massif,因此默认情况下是关闭的。请注意,Massif假定主堆栈在启动时的大小为零。事实并非如此,但准确地做其他事情很困难。此外,从零开始更好地表示用户程序实际控制的主堆栈部分的大小。