Vya*_*ash 3 c c++ linux systems-programming
我正在大学学习操作系统,我的任务之一是查找malloc()不会导致mmap()系统调用的情况。
我使用stracelinux 实用程序来跟踪系统调用,但在我的情况下,mmap()每次使用时我都会看到系统调用malloc()。
是malloc()一直打电话mmap()还是不打电话?
谢谢
这既不是由 C、C++ 定义,也不是由 POSIX 标准定义的。
malloc() 是否总是调用 mmap() ?
不一定。这取决于malloc实施、配置和分配的大小以及可能的其他因素。
如果使用 glibc:
可调:glibc.malloc.mmap_threshold
此可调参数取代 MALLOC_MMAP_THRESHOLD_ 环境变量,并且功能相同。
设置此可调参数后,使用 mmap 系统调用将所有大于此值(以字节为单位)的块分配到普通堆之外。这样可以保证这些块的内存可以免费返回给系统。请注意,小于此阈值的请求可能仍会通过 mmap 分配。
如果未设置此可调参数,则默认值设置为“131072”字节,阈值会动态调整以适应程序的分配模式。如果设置了可调参数,则禁用动态调整并将值设置为静态。
如果不使用 glibc,请查阅您使用的实现的文档或来源。
| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |