我在阅读关于malloc
的一些内容,发现在malloc
的手册页中有以下内容:
通常,malloc()从堆上分配内存,并根据需要使用sbrk(2)调整堆的大小。 当分配大于MMAP_THRESHOLD字节的内存块时,glibc malloc()实现将使用mmap(2)将内存分配为私有匿名映射。 MMAP_THRESHOLD默认情况下为128 kB,但可使用mallopt(3)进行调整。 使用mmap(2)执行的分配不受RLIMIT_DATA资源限制的影响(请参见getrlimit(2))。
因此,从MMAP_THRESHOLD开始,malloc开始使用mmap
。
- 有没有理由为大块内存切换到
mmap
? - 这会影响进程执行性能吗?
mmap
系统调用是否强制进行上下文切换?