【问题标题】:Emacs Buffer Allocation using mmap使用 mmap 分配 Emacs 缓冲区
【发布时间】:2011-09-13 18:06:58
【问题描述】:

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

参见emacs/src/config.h 中的USE_MMAP_FOR_BUFFERS。 和use_mmap_for_buffersemacs/configure.in

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

【问题讨论】:

  • 这个问题似乎很具体。或许您最好将其发布到 emacs-devel@gnu.org?

标签: linux emacs configuration memory-management memory-mapped-files


【解决方案1】:

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

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

【讨论】:

  • 但是 malloc 怎么能替代 mmap 呢? mmap 将文件 fd 映射到内存,但 malloc 只分配与任何文件(描述符)无关的内存。
  • @Nordlöw:请参阅我上面引用的“私有匿名映射”部分。也就是说,mmap(2) 的标志参数是 MAP_PRIVATE|MAP_ANONYMOUS。有关更多信息,请参见 mmap(2) 手册页。
【解决方案2】:

mmap() 分配更容易以线程安全的方式实现,但 brk() 分配在 Linux 上要慢 10%。见this question

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多