9

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

USE_MMAP_FOR_BUFFERSemacs/src/config.h。并且use_mmap_for_buffersemacs/configure.in.

mmap基于访问不是优于普通缓冲区分配吗?

4

2 回答 2

6

默认的 glibc malloc() 使用 mmap 进行大分配;来自 malloc(3) 联机帮助页。“当分配大于 MMAP_THRESHOLD 字节的内存块时,glibc malloc() 实现使用 mmap(2) 将内存分配为私有匿名映射。MMAP_THRESHOLD 默认为 128 kB,但可使用 mallopt(3) 进行调整。”

也许在其他平台上切换到 mmap 是为了解决自己不做的糟糕的 malloc() 实现?

于 2011-06-13T08:46:36.350 回答
2

mmap() 分配更容易以线程安全的方式实现,但 brk() 分配在 Linux 上要慢 10%。看到这个问题

于 2011-06-13T08:31:00.623 回答