我了解到每个进程的默认堆栈大小限制在8MB以内,mmap_base是根据堆栈大小( rlimit和随机值)计算的。下面的代码是x86(linux/include/uapi/asm-generic/resource.h).中计算mmap_base地址的mmap_base函数{
unsigned long gap = rlimi
为什么默认情况下,在cygwin、freebsd和irix6-5上激活mmap缓冲区分配,而在linux上却不激活?参见USE_MMAP_FOR_BUFFERS in emacs/src/config.h。use_mmap_for_buffers in emacs/configure.in.基于mmap的access 难道不是比普通缓冲区分配优越的吗?
在mmap()手册页中:void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);The mmap() function asks to map 'length' bytes starting at offset 'offset'
from the file (or根据我的实践,offset必须是页面大小的倍数,例如在我的Linux