malloc什么时候不调用mmap?

Vya*_*ash 3 c c++ linux systems-programming

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

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

malloc()一直打电话mmap()还是不打电话?

谢谢

eer*_*ika 9

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

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

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

如果使用 glibc:

可调:glibc.malloc.mmap_threshold

此可调参数取代 MALLOC_MMAP_THRESHOLD_ 环境变量,并且功能相同。

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

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

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