В чем разница между счетчиком памяти массива и памятью мемчека? - PullRequest
2 голосов
/ 23 января 2012

Я использую valgrind, чтобы проверить, что моя программа находится в пределах границ памяти, необходимых для класса.Когда я запускаю массив, я получаю симпатичную диаграмму, которая говорит, что мое максимальное использование памяти (куча + стек) составляет 21 КБ.Когда я запускаю memcheck Вальгринда, он говорит, что я выделил 185931 байт.Какая разница в том, что они сообщают?Если это имеет значение, в моем коде есть шаг, где я перебираю две строки, поэтому я изменяю размер первой строки с помощью realloc, strcat двух строк и освобождаю вторую.

1 Ответ

6 голосов
/ 23 января 2012

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 байт).

...