地块可以衡量全球/静态数据成本吗?

时间:2017-06-09 16:08:41

标签: profiling valgrind massif

我看到massif可以测量堆使用情况,并且还可以使用某些选项进行堆栈使用。它是否还报告全局数据消耗(定义为全局或静态变量的数据)?

1 个答案:

答案 0 :(得分:1)

  

它是否还报告全局数据消耗(定义为全局或静态变量的数据)?

不,Massif是只有堆的工具,并不测量.data和.bss部分,而是直接mmap-ed内存(但它可以测量用于存储一些局部变量的堆栈,并且alloca) :

http://valgrind.org/docs/manual/ms-manual.html

  

Massif是一个堆分析器。它测量程序使用的堆内存量。这包括有用空间和为记账和对齐目的分配的额外字节。它还可以测量程序堆栈的大小,但默认情况下不会这样做。 ...

     

9.2.8。测量过程中的所有内存

     

值得强调的是,默认情况下,Massif仅测量堆内存,即分配有malloccallocreallocmemalignnew的内存, new[]以及其他一些类似的功能。 (当然,它可以选择性地测量堆栈内存。)这意味着它不会直接测量使用较低级别系统调用分配的内存,例如mmapmremapbrk。 ...

     

--stacks=<yes|no> [default: no]

     

指定是否应该进行堆栈分析。此选项大大减慢了Massif,因此默认情况下是关闭的。请注意,Massif假定主堆栈在启动时的大小为零。事实并非如此,但准确地做其他事情很困难。此外,从零开始更好地表示用户程序实际控制的主堆栈部分的大小。