8

我需要从 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.

4

1 回答 1

3

这个 2004 年涉及关键 glibc 开发人员的线程表明,由于接口已经“......根本不适合实现”。,制作它的 64 位干净版本被认为没有什么意义。(该mallinfo()界面不是为 glibc 设计的 - 它正在考虑包含在SUS中)。

根据您尝试对信息执行的操作,您可能可以使用malloc_stats(),它只会在标准错误时产生输出 - 因为它只是文本输出,它可以更改以匹配 的内部实现malloc(),因此至少会有产生合理结果的优势。

于 2010-05-10T07:34:24.930 回答