Как профилировать использование памяти? - PullRequest
30 голосов
/ 14 января 2011

Мне известно о Valgrind, но он просто обнаруживает проблемы с управлением памятью.То, что я ищу, - это инструмент, который дает мне обзор того, какие части моей программы занимают сколько памяти.Графическое представление, например, с древовидной картой (как это делает KCachegrind для Callgrind), было бы здорово.

Я работаю на машине с Linux, поэтому инструменты Windows не очень мне помогут.

Ответы [ 4 ]

34 голосов
/ 14 января 2011

Используйте массив , который является частью инструментов Valgrind. Массив-визуализатор может помочь вам построить график данных или вы можете просто использовать команду ms_print.

7 голосов
/ 03 декабря 2015

Попробуйте профилировщик кучи , поставляемый с gperftools от Google.Я всегда создавал его из исходников, но он доступен как скомпилированный пакет под несколькими дистрибутивами Linux.

Это так же просто, как связать динамическую библиотеку с вашими исполняемыми файлами и запустить программу,Он собирает информацию о каждом динамическом выделении памяти (насколько я видел) и сохраняет на диск дамп памяти каждый раз, когда происходит одно из следующих действий:

  • HEAP_PROFILE_ALLOCATION_INTERVALпрограмма распределила байты (по умолчанию: 1 ГБ)
  • отметка использования памяти высокой воды увеличивается на HEAP_PROFILE_INUSE_INTERVAL байтов (по умолчанию: 100 МБ)
  • HEAP_PROFILE_TIME_INTERVAL секунд прошло (по умолчанию): неактивен)
  • Вы явно вызываете HeapProfilerDump() из своего кода

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

В конечном счете, существует несколько возможных форматов вывода, таких как текстовый или графический (в форме ориентированного графа):

Graph of memory usage

Используя этот инструмент, я смог обнаружить неправильное использование памяти, которое я не смог найти с помощью массива.

0 голосов
/ 24 января 2019

Использовать опцию callgrind с valgrind

0 голосов
/ 21 января 2019

«Более новая» опция - HeapTrack .В отличие от массива, это инструментальная версия malloc / free, которая хранит все вызовы и создает дамп журнала.

Графический интерфейс хорош (но требует Qt5 IIRC) и время выполнения результатов (потому чтоможет также захотеть отслеживать время) менее предвзяты, чем valgrind (так как они не эмулируются).

...