拥有64位功能的mallinfo替代品?

时间:2016-11-30 00:19:25

标签: linux memory-management malloc

在Linux上,我们有一个名为mallinfo的(GNU C库)函数,它为您提供了一些与内存分配相关的数字:

 struct mallinfo {
           int arena;     /* Non-mmapped space allocated (bytes) */
           int ordblks;   /* Number of free chunks */
           int smblks;    /* Number of free fastbin blocks */
           int hblks;     /* Number of mmapped regions */
           int hblkhd;    /* Space allocated in mmapped regions (bytes) */
           int usmblks;   /* Maximum total allocated space (bytes) */
           int fsmblks;   /* Space in freed fastbin blocks (bytes) */
           int uordblks;  /* Total allocated space (bytes) */
           int fordblks;  /* Total free space (bytes) */
           int keepcost;  /* Top-most, releasable space (bytes) */
       };

奇怪的是,这些值通常是32位整数(!);好吧,这真的不会,特别是对于以字节数给出的值(例如fordblks)。

我猜这是以某种方式被弃用的,而且其他一些设施可以获得相同的信息。什么是替代设施?

1 个答案:

答案 0 :(得分:2)

使用malloc_info()。你需要解析它的xml输出 来自malloc_info man page

  

malloc_info()函数旨在解决缺陷问题   malloc_stats(3)和mallinfo(3)。

malloc_info的源代码是例如  可用here。所有变量都使用size_t存储并相应地打印出来,它应该适用于任何位机器。

E.g。在我的系统上(glibc 2.26版)malloc_info(0, stdout)打印出以下内容:

<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"/>
<total type="mmap" 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>