我需要从GCC for Linux编译的C程序中回答一个基本问题:当前正在使用多少进程堆(由malloc
分配)以及如果有空闲堆阻塞了多少。标准库的GNU实现具有mallinfo
函数,它准确报告了我需要的内容,但它只能用于32位配置,而AFAIK,没有64位等效的功能(顺便说一下,有谁知道为什么?)。
我在Linux上使用GCC,所以我需要这个用于Linux。但我认为堆对系统是不透明的,因此回答这个问题的唯一方法是使用标准库实现提供的方法。
在Windows平台上的MSVC实现中,没有等效的mallinfo
函数,但是有所谓的 heap-walk 功能,它允许通过遍历所有块中的所有块来计算必要的信息。堆。 AFAIK,GNU C库中没有堆行走接口。 (有吗?)。
那么,再说一次,我在GCC做什么?它不一定非常有效,这意味着前面提到的基于堆步行的方法对我来说非常好。我如何知道GCC使用了多少堆以及有多少空闲?我可以尝试安装malloc-hook并“手动”跟踪大小,虽然我不确定如何在不使用mallinfo.arena
的情况下确定当前堆竞技场大小(请参阅mallinfo
)。
答案 0 :(得分:3)
This thread from 2004表明,由于接口已经“......根本不适合实现。”,有人认为制作64-有点干净的版本。 (mallinfo()
界面不是为glibc设计的 - 它被考虑包含在SUS中。
根据您尝试对信息执行的操作,您可以使用malloc_stats()
,它只会产生标准错误的输出 - 因为它只是文本输出,它可以更改以匹配内部实现malloc()
的{{1}},因此至少具有产生明显结果的优势。