我正在大学学习操作系统,其中一个任务是找到 malloc()
不会引起 mmap()
系统调用的情况。
我使用了Linux实用程序 strace
来跟踪系统调用,但在我的情况下,每次使用 malloc()
时都会看到 mmap()
系统调用。
malloc()
是否总是调用 mmap()
呢?
谢谢
我正在大学学习操作系统,其中一个任务是找到 malloc()
不会引起 mmap()
系统调用的情况。
我使用了Linux实用程序 strace
来跟踪系统调用,但在我的情况下,每次使用 malloc()
时都会看到 mmap()
系统调用。
malloc()
是否总是调用 mmap()
呢?
谢谢
这并不是由C、C++或POSIX标准定义的。
malloc()总是调用mmap()吗?
不一定。这取决于malloc
实现、配置和分配的大小,可能还有其他因素。
如果使用glibc:
可调整的:glibc.malloc.mmap_threshold
此可调整项取代MALLOC_MMAP_THRESHOLD_环境变量,并具有相同的功能。
当设置此可调整项时,所有大小大于此值(以字节为单位)的块都将在常规堆之外使用mmap系统调用进行分配。这样可以保证这些块的内存在释放时能够返回给系统。请注意,仍然可能会通过mmap分配小于此阈值的请求。
如果未设置此可调整项,则默认值设置为“131072”字节,并且阈值会根据程序的分配模式动态调整。如果设置了可调整项,则禁用动态调整,并将其值设置为静态值。
如果不使用glibc,则请查看所使用实现的文档或源代码。
malloc()
根本不会调用mmap()
:-) - Peter