Memcheck нацелен на поиск утечек памяти, поэтому он подсчитывает сумму всех выделений памяти (и сумму всех освобождений).
Массив предназначен для анализа объема памяти программы, поэтомуон подсчитывает общее количество используемой памяти в каждой точке программы.
Другими словами, если ваша программа выглядит следующим образом:
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 байт).