为什么mmap
默认情况下在cygwin,freebsd和irix6-5上激活缓冲区分配而不是在linux上激活?
请参阅USE_MMAP_FOR_BUFFERS
中的emacs/src/config.h
。
和use_mmap_for_buffers
中的emacs/configure.in
。
基于mmap
的访问 高级 是否正常缓冲区分配?
答案 0 :(得分:6)
默认的glibc malloc()使用mmap进行大量分配;来自malloc(3)联机帮助页。 “当分配大于MMAP_THRESHOLD字节的内存块时,glibc malloc()实现使用mmap(2)将内存分配为私有匿名映射。 MMAP_THRESHOLD默认为128 kB,但可以使用mallopt(3)进行调整。“
也许在其他平台上切换到mmap是为了解决那些不能自己做的差的malloc()实现?
答案 1 :(得分:2)
mmap()分配更容易以线程安全方式实现,但brk()分配在Linux上慢了约10%。请参阅this question。