64位平台上GCC中的基本堆使用统计信息

AnT*_*AnT 8 c linux malloc gcc heap-fragmentation

我需要从GCC for Linux编译的C程序中回答一个基本问题:当前正在使用多少进程堆(由分配malloc)以及如果有空闲堆阻塞了多少.标准库的GNU实现具有mallinfo准确报告我需要的功能,但它只能用于32位配置,而AFAIK,没有64位等效的功能(BTW,谁知道为什么?).

我在Linux上使用GCC,所以我需要这个用于Linux.但我认为堆对系统是不透明的,因此回答这个问题的唯一方法是使用标准库实现提供的方法.

在Windows平台上的MSVC实现中,没有相应的mallinfo功能,但有所谓的堆行走功能,它允许通过迭代堆中的所有块来计算必要的信息.AFAIK,GNU C库中没有堆行走接口.(在那儿?).

那么,再说一次,我在GCC做什么?它不一定非常有效,这意味着前面提到的基于堆步行的方法对我来说非常好.我如何知道GCC使用了多少堆以及有多少空闲?我可以尝试安装malloc-hooks并"手动"跟踪大小,虽然我不知道如何在mallinfo.arena不使用的情况下确定当前堆竞技场大小(请参阅参考资料)mallinfo.

caf*_*caf 3

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

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