Утилита командной строки OS X «куча», по-видимому, может перечислять различные зоны malloc и отдельные куски malloc любого запущенного процесса. Для этого не требуется связываться с какой-либо специальной библиотекой отладки или иметь переменные среды кучи отладки, установленные для целевого процесса.
Какой основной механизм он использует для этого? Все API-интерфейсы для отладки malloc, которые я мог найти, должны иметь хуки, установленные внутри процесса, специальные библиотеки отладки или переменные среды отладки, установленные до запуска процесса. Из того, что я могу сказать, исходный код утилиты недоступен, а многочисленные поиски в Google и Apple.com не выявили ничего полезного.
В основном меня интересует получение фактической суммы памяти в malloc, поскольку размер резидентного процесса часто может быть значительно завышен по сравнению с тем, что фактически запрашивается кодом приложения.
Спасибо!
Они используют API самоанализа зоны malloc, объявленные в /usr/include/malloc/malloc.h
, Каждая зона malloc содержит указатель на malloc_introspection_t
структура, которая подвергает enumerator
функция, которая может использоваться для обнаружения областей памяти, которые были зарезервированы зоной malloc, и детали всех отдельных выделений в этих областях.
Других решений пока нет …