mallinfo的64位替代方案?

问题描述 投票:5回答:1

在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)。

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

linux memory-management malloc
1个回答
2
投票

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

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

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

例如。在我的系统上(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>
© www.soinside.com 2019 - 2024. All rights reserved.