Linux 使用mmap的Emacs缓冲区分配

Linux 使用mmap的Emacs缓冲区分配,linux,emacs,configuration,memory-management,memory-mapped-files,Linux,Emacs,Configuration,Memory Management,Memory Mapped Files,为什么在cygwin、freebsd和irix6-5上默认激活了mmap缓冲区分配,但在linux上没有激活 请参见emacs/src/config.h中的使用MMAP\u作为缓冲区。 和在emacs/configure.in中为缓冲区使用\u mmap\u 基于mmap的访问不是优于正常的缓冲区分配吗?mmap()分配更容易以线程安全的方式实现,但在Linux上,brk()分配大约慢10%。请参阅。默认的glibc malloc()使用mmap进行大型分配;从malloc(3)手册页。“分配大

为什么在cygwin、freebsd和irix6-5上默认激活了
mmap
缓冲区分配,但在linux上没有激活

请参见
emacs/src/config.h
中的
使用MMAP\u作为缓冲区。
和
emacs/configure.in
中为缓冲区使用\u mmap\u

基于
mmap
的访问不是优于正常的缓冲区分配吗?

mmap()分配更容易以线程安全的方式实现,但在Linux上,brk()分配大约慢10%。请参阅。

默认的glibc malloc()使用mmap进行大型分配;从malloc(3)手册页。“分配大于MMAP_阈值字节的内存块时,glibc malloc()实现使用mmap(2)将内存分配为私有匿名映射。 默认情况下,MMAP_阈值为128 kB,但可以使用mallopt(3)进行调整。”


也许在其他平台上切换到mmap是为了解决糟糕的malloc()实现,而这些实现本身并不能做到这一点?

这个问题似乎非常具体。也许你最好把它发到emacs上-devel@gnu.org?但malloc如何替代mmap?mmap将文件fd映射到内存,但malloc只分配与任何文件(描述符)无关的内存。@Nordlöw:请参阅我上面引用的“私有匿名映射”部分。也就是说,mmap(2)的flags参数是MAP|u PRIVATE | MAP|u ANONYMOUS。有关更多信息,请参阅mmap(2)手册页。