c++ - OS X 'heap' 命令行实用程序如何收集其信息?

标签 c++ macos memory malloc heap-memory

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

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

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

谢谢!

最佳答案

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

关于c++ - OS X 'heap' 命令行实用程序如何收集其信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13843844/

相关文章:

c++ - 在多个 cpp 文件中重用未命名的命名空间函数

c++ - 实现加权 BFS 以找到最短路径

c++ - 如何在 Visual Studio 2005 中创建 ATL/C++ ActiveX DLL

macos - Silverlight 4 macintosh 兼容性

ios - Xcode 8 图像补全

c++ - 如何知道何时释放内存?

c++迭代破坏二叉树

python - 如何准备好在 Mac 上使用 python 3.X?

python - Python 何时为相同的字符串分配新内存?

Java 减少堆栈大小以节省内存