OS X'heap'命令行实用程序显然可以枚举任何正在运行的进程的不同malloc区域和单个malloc'ed块。它不需要与任何特殊的调试库链接,也不需要为目标进程设置任何调试堆环境变量。
它使用哪种潜在机制来做到这一点?我能找到的所有 malloc 调试 API 都需要在启动进程之前从进程内部设置钩子、链接特殊的调试库或设置调试环境变量。据我所知,该实用程序的源代码不可用,并且在Google和 Apple.com 上进行的大量搜索都没有发现任何有用的内容。
我最感兴趣的是获取实际的 malloc'ed 内存总和,因为进程的驻留大小通常会与应用程序代码实际请求的大小显着膨胀。
谢谢!
他们使用 /usr/include/malloc/malloc.h
中声明的 malloc 区域自省 API。每个 malloc 区域都包含一个指向 malloc_introspection_t
结构的指针,该结构公开一个 enumerator
函数,该函数可用于发现 malloc 区域保留的内存区域,以及这些区域内所有单个分配的详细信息。