У меня проблема с моей программой, использующей намного больше памяти, чем я думаю, должна
Я использовал 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, может быть, вы сможете пролить свет на то, почему он использует так много памяти?