mmap
cygwin、freebsd、irix6-5でバッファ割り当てがデフォルトでアクティブになっているのに、Linuxではアクティブになっていないのはなぜですか?
を参照USE_MMAP_FOR_BUFFERS
してくださいemacs/src/config.h
。とuse_mmap_for_buffers
でemacs/configure.in
。
mmap
ベースアクセスは通常のバッファ割り当てよりも優れていませんか?
mmap
cygwin、freebsd、irix6-5でバッファ割り当てがデフォルトでアクティブになっているのに、Linuxではアクティブになっていないのはなぜですか?
を参照USE_MMAP_FOR_BUFFERS
してくださいemacs/src/config.h
。とuse_mmap_for_buffers
でemacs/configure.in
。
mmap
ベースアクセスは通常のバッファ割り当てよりも優れていませんか?
デフォルトの glibc malloc() は、大きな割り当てに mmap を使用します。malloc(3) マンページから。「MMAP_THRESHOLD バイトより大きいメモリ ブロックを割り当てる場合、glibc の malloc() 実装は、mmap(2) を使用してプライベートな匿名マッピングとしてメモリを割り当てます。MMAP_THRESHOLD はデフォルトで 128 kB ですが、malopt(3) を使用して調整できます。」
おそらく、それらの他のプラットフォームで mmap に切り替えることは、それ自体を行わない貧弱な malloc() 実装を回避することでしょうか?
mmap()の割り当ては、スレッドセーフな方法で実現するのが簡単ですが、Linuxではbrk()の割り当てが約10%遅くなります。この質問を参照してください。