首页 > 解决方案 > malloc什么时候不调用mmap?

问题描述

我正在大学学习操作系统,我的任务之一是找到malloc()不会导致mmap()系统调用的情况。

我使用stracelinux 实用程序来跟踪系统调用,但在我的情况下,mmap()每次使用时我都会看到系统调用malloc()

总是malloc()打电话mmap()还是不打电话?

谢谢

标签: c++clinuxsystems-programming

解决方案


这既不是由 C、C++ 或 POSIX 标准定义的。

malloc() 是否总是调用 mmap() ?

不一定。这取决于malloc实现、配置和分配的大小以及可能的其他因素。

如果使用 glibc:

可调:glibc.malloc.mmap_threshold

此可调参数取代了 MALLOC_MMAP_THRESHOLD_ 环境变量并且在功能上是相同的。

设置此可调参数后,所有大于此值(以字节为单位)的块都将使用 mmap 系统调用在正常堆外分配。这样可以保证这些块的内存可以免费返回给系统。请注意,小于此阈值的请求仍可能通过 mmap 分配。

如果未设置此可调参数,则默认值设置为“131072”字节,并动态调整阈值以适应程序的分配模式。如果设置了可调参数,则禁用动态调整并将值设置为静态。

如果不使用 glibc,请查阅您使用的实现的文档或源代码。


推荐阅读