massif的内存数和memcheck的内存数有什么区别?

时间:2012-01-23 05:09:53

标签: c valgrind

我正在使用valgrind来检查我的程序是否在一个类所需的内存范围内。当我运行massif时,我得到一张漂亮的图表,表示我的最大内存使用量(堆+堆栈)是21 KB。当我运行valgrind的memcheck时,它告诉我我分配了185931个字节。他们报道的内容有何不同?如果它很重要,我的代码中有一个步骤,我捕获两个字符串,所以我用realloc调整第一个,strcat两个字符串,然后释放第二个。

1 个答案:

答案 0 :(得分:6)

Memcheck旨在寻找内存泄漏,因此它计算所有内存分配的总和(以及所有释放的总数)。

Massif旨在查看程序的内存占用量,因此它会计算程序中每个点的总内存使用量。

换句话说,如果你的程序是这样的:

int main(void)
{
    free(malloc(10*1024));
    free(malloc(10*1024));
    return 0;
}

然后Memcheck会告诉你:

total heap usage: 2 allocs, 2 frees, 20,480 bytes allocated

而Massif会告诉你:

--------------------------------------------------------------------------------
  n        time(i)         total(B)   useful-heap(B) extra-heap(B)    stacks(B)
--------------------------------------------------------------------------------
  0              0                0                0             0            0
  1        130,386           10,248           10,240             8            0
  2        131,436           10,248           10,240             8            0
99.92% (10,240B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
->99.92% (10,240B) 0x8048407: main (in /home/kevin/miscdev/so/x)

(在程序的整个生命周期中,分配了20480个字节;但峰值使用量仅为10240字节)。