Как утилита командной строки OS X ‘heap’ собирает свою информацию?

Утилита командной строки OS X «куча», по-видимому, может перечислять различные зоны malloc и отдельные куски malloc любого запущенного процесса. Для этого не требуется связываться с какой-либо специальной библиотекой отладки или иметь переменные среды кучи отладки, установленные для целевого процесса.

Какой основной механизм он использует для этого? Все API-интерфейсы для отладки malloc, которые я мог найти, должны иметь хуки, установленные внутри процесса, специальные библиотеки отладки или переменные среды отладки, установленные до запуска процесса. Из того, что я могу сказать, исходный код утилиты недоступен, а многочисленные поиски в Google и Apple.com не выявили ничего полезного.

В основном меня интересует получение фактической суммы памяти в malloc, поскольку размер резидентного процесса часто может быть значительно завышен по сравнению с тем, что фактически запрашивается кодом приложения.

Спасибо!

4

Решение

Они используют API самоанализа зоны malloc, объявленные в /usr/include/malloc/malloc.h, Каждая зона malloc содержит указатель на malloc_introspection_t структура, которая подвергает enumerator функция, которая может использоваться для обнаружения областей памяти, которые были зарезервированы зоной malloc, и детали всех отдельных выделений в этих областях.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]