我需要回答一个基本问题,就是在由GCC编译的Linux C程序中,堆内存有多少被使用了(由malloc分配),还有多少空闲块。标准库的GNU实现有一个名为mallinfo的函数可以报告我需要的确切信息,但它只适用于32位配置,并且据我所知,没有64位等效功能(顺便问一句,有人知道为什么吗?)。
我在Linux上使用GCC,因此我需要这个功能。但我认为堆对系统是不透明的,所以回答这个问题的唯一方法是使用标准库实现提供的手段。
在Windows平台上的MSVC实现中,没有与mallinfo函数相当的函数,但有所谓的堆遍历功能,它允许通过迭代堆中的所有块来计算必要的信息。据我所知,GNU C库中没有堆遍历接口。(有吗?)
那么,在GCC中该怎么做呢?它不必高效,也就是说,上述基于堆遍历的方法对我来说完全可以胜任。在GCC中如何找出有多少堆被使用,有多少是空闲的?我可能会尝试安装malloc-hooks并“手动”跟踪大小,尽管我不确定如何确定当前堆场大小(请参见mallinfo.arena)而不使用mallinfo。
我在Linux上使用GCC,因此我需要这个功能。但我认为堆对系统是不透明的,所以回答这个问题的唯一方法是使用标准库实现提供的手段。
在Windows平台上的MSVC实现中,没有与mallinfo函数相当的函数,但有所谓的堆遍历功能,它允许通过迭代堆中的所有块来计算必要的信息。据我所知,GNU C库中没有堆遍历接口。(有吗?)
那么,在GCC中该怎么做呢?它不必高效,也就是说,上述基于堆遍历的方法对我来说完全可以胜任。在GCC中如何找出有多少堆被使用,有多少是空闲的?我可能会尝试安装malloc-hooks并“手动”跟踪大小,尽管我不确定如何确定当前堆场大小(请参见mallinfo.arena)而不使用mallinfo。
mstats
。此外,您链接的文档与GNU网站http://www.gnu.org/s/libc/manual/html_node/index.html#toc_Memory上提供的类似文档不同,在后者中,`mstats`被替换为`mallinfo`。我猜测您的链接指向了某个过时的GNU C库版本。 - AnT stands with Russia