Попробуйте профилировщик кучи , поставляемый с gperftools от Google.Я всегда создавал его из исходников, но он доступен как скомпилированный пакет под несколькими дистрибутивами Linux.
Это так же просто, как связать динамическую библиотеку с вашими исполняемыми файлами и запустить программу,Он собирает информацию о каждом динамическом выделении памяти (насколько я видел) и сохраняет на диск дамп памяти каждый раз, когда происходит одно из следующих действий:
HEAP_PROFILE_ALLOCATION_INTERVAL
программа распределила байты (по умолчанию: 1 ГБ) - отметка использования памяти высокой воды увеличивается на
HEAP_PROFILE_INUSE_INTERVAL
байтов (по умолчанию: 100 МБ) HEAP_PROFILE_TIME_INTERVAL
секунд прошло (по умолчанию): неактивен) - Вы явно вызываете
HeapProfilerDump()
из своего кода
Последний, по моему опыту, наиболее полезен, поскольку вы можете точно определить, когда делать снимок использование кучи , а затем сравнить два разных снимка и посмотреть, что не так.
В конечном счете, существует несколько возможных форматов вывода, таких как текстовый или графический (в форме ориентированного графа):
Используя этот инструмент, я смог обнаружить неправильное использование памяти, которое я не смог найти с помощью массива.