我需要从 GCC 为 Linux 编译的 C 程序中回答一个基本问题:当前使用了多少进程堆(由 分配malloc
)以及如果空闲堆阻塞,还有多少驻留。标准库的 GNU 实现具有mallinfo
准确报告我需要的功能,但它只能用于 32 位配置,而且,AFAIK,没有 64 位等效功能(顺便说一句,有人知道为什么吗?)。
我在 Linux 上使用 GCC,所以我在 Linux 上需要它。但是我假设堆对系统是不透明的,所以回答这个问题的唯一方法是使用标准库实现提供的手段。
在 Windows 平台上的 MSVC 实现中,没有等效的mallinfo
功能,但有所谓的heap-walk功能,它允许通过遍历堆中的所有块来计算必要的信息。AFAIK,GNU C 库中没有堆遍历接口。(在那儿?)。
那么,再次,我在 GCC 中做什么?它不一定要高效,这意味着前面提到的基于堆遍历的方法对我来说非常好。如何找出 GCC 中有多少堆正在使用以及有多少可用?我可能可以尝试安装 malloc-hooks 并“手动”跟踪大小,尽管我不确定如何在mallinfo.arena
不使用mallinfo
.