Мониторинг / отладка использования памяти C - PullRequest
3 голосов
/ 03 апреля 2012

У меня проблема с моей программой, использующей намного больше памяти, чем я думаю, должна

Я использовал valgrind, и это было находкой для обнаружения проблем с памятью, таких как переполнение буфера и утечки памяти

Проблема, с которой я столкнулся, заключается в том, что это не похоже на утечку, просто использование, которое несовместимо с тем, что, на мой взгляд, должно быть

Есть ли другой инструмент, который вы можете использовать для мониторинга использования памяти вТочно так же, как вы можете отслеживать значения переменных с помощью отладчика, такого как gdb?

Массив сказал мне, что львиная доля памяти кучи выделяется с помощью этого оператора:

->98.80% (1,338,700,288B) 0x40341D5: caa (caa.c:196)

оператор, являющийся вызовом для помещения элемента в UT_array, например,

utarray_push_back(utarr_ctr_pdws, &pdw);

pdw является указателем на структуру и является переменной стека

Таким образом, может показаться, что память UT_arraymallocing не освобождается, но у меня есть еще одно утверждение в несколько строк, явно делающее это:

utarray_free(utarr_ctr_pdws);

Поэтому UT_array - это просто массив указателейне требуется никакой дополнительной функции dtor, определенной в вспомогательной структуре UT_ICD.

Если у кого-то есть опыт использования UT_arrays, может быть, вы сможете пролить свет на то, почему он использует так много памяти?

Ответы [ 2 ]

2 голосов
/ 18 мая 2012

Массив valgrind является ответом здесь, это инструмент анализа кучи памяти (см. http://valgrind.org/docs/manual/ms-manual.html)

1 голос
/ 11 апреля 2012

Я подозреваю, что в вашей структуре pdw есть что-то, для чего вы выделили место.utarray_free не будет знать о членах структуры, поэтому освободит только указатель на саму структуру.Если у вас есть malloc место для любого члена структуры, utarray_free не будет знать, как их очистить, если вы не установите функцию dtor в UT_icd для освобождения выделенных членов структуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...