OS X“堆”命令行实用程序如何收集其信息?

NBF*_*RTW 5 c++ memory malloc macos heap-memory

OS X“堆”命令行实用程序显然可以枚举不同的 malloc 区域以及任何正在运行的进程的各个 malloc 块。它不需要与任何特殊的调试库链接,也不需要为目标进程设置任何调试堆环境变量。

它使用哪种底层机制来做到这一点?我发现的所有 malloc 调试 API 都需要在进程内部设置挂钩、链接特殊调试库或在启动进程之前设置调试环境变量。据我所知,该实用程序的源代码不可用,并且在 Google 和 Apple.com 上进行的大量搜索没有显示任何有用的信息。

我最感兴趣的是获取实际分配的内存总和,因为进程的驻留大小通常会比应用程序代码实际请求的大小显着增加。

谢谢!

bda*_*ash 2

他们使用 中声明的 malloc 区域自省 API /usr/include/malloc/malloc.h。每个 malloc 区域都包含一个指向malloc_introspection_t结构的指针,该结构公开一个enumerator函数,该函数可用于发现 malloc 区域已保留的内存区域以及这些区域内所有单独分配的详细信息。