mallinfo 不显示 mmap 分配的信息

mallinfo doesn't show mmap allocation's information

提问人:Vadim Sadokhov 提问时间:12/27/2022 最后编辑:HarithVadim Sadokhov 更新时间:12/29/2022 访问量:96

问:

在 mallinfo 结构中,有两个字段和 .man 文档说,他们负责 mmap 分配的块数和总字节数。但是当我运行下一个代码时hblkshblkhd

void * ptr = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
*(int *) ptr = 10;

字段 ,也为零。而块中的可用字节总数减少。您能解释一下为什么会观察到这种行为吗?hblkshblkhd

我还尝试分配所有可用空间并在其后使用 mmap。但在这种情况下,字段也等于零

编译器:gcc 9.4.0 操作系统: Ubuntu 20.04.1

C Linux malloc mmap

评论

0赞 Harith 12/27/2022
C并且是两种不同的语言。选择正确的标签。C++
0赞 Harith 12/27/2022
在手册页中:“请注意,并非所有分配都对这些函数可见。请考虑改用malloc_info(3)。 “仅返回主内存分配区域的信息。其他领域的拨款被排除在外。

答:

0赞 Vadim Sadokhov 12/28/2022 #1

我做了一些实验,它们使我得出结论,只有在调用时才填充此字段。正常调用不会显示在此统计信息中,这是合乎逻辑的,因为这是一个系统调用,并且统计信息是在用户空间中收集的mmapmallocmmap

评论

0赞 Harith 12/29/2022
你有没有找到任何支持这一点的东西?直接调用或通过辅助函数调用(通常与现在一起实现)有什么不同?mmapmallocmmap
0赞 Vadim Sadokhov 12/29/2022
@Haris,跟踪用户空间中的内存。如果没有足够的内存,它可以使用 system call ,但与直接调用不同,它会将调用写入其统计信息。以我为例。1)我们需要用完堆上的可用内存。2) 分配大于 的字节数。在这种情况下,字段不会为我所问的零mallocmmapmmapMMAP_THRESHOLD