Протокол malloc
Протокол malloc - это дополнительное расширение подсистемы malloc, позволяющее пользователю получать информацию об активных областях, выделенных вызывающим процессом. Эти данные могут применяться для определения причин возникновения неполадок и анализа производительности.
Данные из протокола malloc
- Адрес, переданный в вызывающий процесс.
- Размер выделяемой области.
- Куча, из которой была выделена область.
- Данные трассировки стека вызывающей функции. Глубину трассировки можно настроить.
- ИД вызывающего процесса.
- ИД вызывающей нити.
- Порядковый номер выделения (с момента начала работы процесса).
- Точное время выделения.
При ведении протокола malloc каждая успешная операция выделения памяти требует дополнительных затрат для сохранения метаданных. Для 32-разрядных приложений эти затраты составляют 50-100 байт, 64-разрядные расходуют в два раза больше. Точное значение зависит от текущих параметров.
- Командой DBX подсистемы malloc.
- С помощью опции отладки
report_allocations.
Включение протокола malloc
MALLOCDEBUG=logMALLOCDEBUG=log:extended,stack_depth:6- extended
- Значение по умолчанию - выключено. Этот параметр позволяет включить
ведение протокола метаданных операций выделения памяти, упомянутых выше. Он
влияет на количество дополнительных ресурсов, требуемых для каждой операции.
Эта опция не имеет эффекта, если
MALLOCTYPEравенwatson2. - глубина-стека
- Задает глубину стека вызовов, содержимое которого сохраняется при выполнении каждой операции выделения памяти. Он влияет на количество дополнительных ресурсов, требуемых для каждой операции. Значение по умолчанию - 4, максимальное значение - 64.
Ограничения
Применение протокола malloc может привести к снижению производительности всех программ из-за выполнения дополнительных операций записи данных в память. Кроме того, возрастет объем используемой памяти.