我一直在试图弄清楚malloc.h中的malloc_info()函数是如何工作的。我知道你必须传递一个FILE *并且还没有实现任何选项,但我对它实际报告的内容感到茫然!?此外,我编写了一个测试应用程序,分配了一大堆内存,并且malloc_info()报告的值不会改变,除非我做了20,000个1字节分配?
有没有人对malloc_info()有任何经验,并且可以了解它应该测量的内存的哪些方面?
应该注意的是,我可以在google上找到关于malloc_info()的任何内容,只是一些粗略的错误报告。
malloc_info()的输出示例:
<malloc version="1">
<heap nr="0">
<sizes>
</sizes>
<total type="fast" count="0" size="0"/>
<total type="rest" count="0" size="0"/>
<system type="current" size="135168"/>
<system type="max" size="135168"/>
<aspace type="total" size="135168"/>
<aspace type="mprotect" size="135168"/>
</heap>
<total type="fast" count="0" size="0"/>
<total type="rest" count="0" size="0"/>
<system type="current" size="135168"/>
<system type="max" size="135168"/>
<aspace type="total" size="135168"/>
<aspace type="mprotect" size="135168"/>
</malloc>
编辑:
作为进一步的解释;我的后备位置是mallinfo()函数,但我希望使用malloc_info()作为我可以收集的内容,它的目标是替换mallinfo()。我发现mallinfo()和malloc_info()的工作方式不同。在我的测试中,mallinfo()跟踪我的所有分配,而malloc_info()完全没有这样做。我只能假设malloc_info()当前已被破坏,或者它的目的不同于mallinfo()。
在omnifarious给出的文章中,有很好的理由应该弃用mallinfo():
它完全不适合64位计算机。数据类型 SysV规范要求不允许 对于大于2 ^ 31字节的值(全部 结构中的字段是整数)。该 第二个问题是数据 结构真的是特定的 malloc实现SysV用于 那个时候。
但是我认为目前malloc_info()还没有准备好接受它。
进一步编辑: 经过一番挖掘之后,似乎malloc_info()在所有出现135168的地方报告了mallinfo()的竞技场大小(至少这是它所对应的)。这似乎没那么有用,与mallinfo()允许的相比,它是一个非常一维的信息。
答案 0 :(得分:1)
通常通过mmap
/dev/zero
告诉操作系统“我需要x个内存页面。”来处理大量分配。大于页面的分配或4(一页通常是4096字节)通常以这种方式处理,这些分配不是我期望的malloc诊断跟踪的东西。
不幸的是,我对malloc_info的了解不多。作为我们无法估量的glibc作者Ulrich Drepper的LJ post about the removal of mallinfo(以及其他内容),似乎是最好的信息,而且非常稀薄,无论如何你可能会发现谷歌。
program I pasted at paste.lisp.org应该通过它的步伐运行malloc
并打印出堆信息。这是非常具体的Linux和gcc,当然,这个问题也是如此。也许摆弄测试程序的输出可以让你深入了解它所谈论的内容。
答案 1 :(得分:1)
仅提及linux man-pages项目为版本3.41提供了malloc_info的联机帮助页: