使用mmap的Emacs缓冲区分配

9
为什么在cygwin、freebsd和irix6-5上默认启用缓冲区分配,而在linux上不启用?
请参考中的以及中的。 基于访问相对于普通缓冲区分配更加优越,这难道不是吗?

这个问题似乎非常具体。也许你最好将它发布到emacs-devel@gnu.org - Thomas
2个回答

6
默认的glibc malloc()在进行大量内存分配时使用mmap;从malloc(3)手册中可以看到:“当分配的内存块大于MMAP_THRESHOLD字节时,glibc malloc()实现会使用mmap(2)将内存作为私有匿名映射分配。默认情况下,MMAP_THRESHOLD为128kB,但可以使用mallopt(3)进行调整。”
也许在其他平台上切换到mmap是为了解决那些不自己执行此操作的低劣malloc()实现?

1
但是malloc如何替代mmap呢?mmap将文件fd映射到内存中,而malloc只分配与任何文件(描述符)无关的内存。 - Nordlöw
2
@Nordlöw:请看我上面引用的“私有匿名映射”部分。也就是说,mmap(2)的flags参数是MAP_PRIVATE|MAP_ANONYMOUS。更多信息请参阅mmap(2)手册页。 - janneb

2

mmap()分配在线程安全方面更容易实现,但在Linux上brk()分配大约慢10%。请参见此问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接