在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
)。
我猜这是以某种方式被弃用的,而且其他一些设施可以获得相同的信息。什么是替代设施?
答案 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>