使用mmap API时内存映射长度的意义是什么?

l33*_*33t 1 c posix mmap

在POSIX中,您有这个不错的mmap()API.文档不清楚值是否会length影响内存/性能.请指教!

void *mmap(void *addr, size_t length, int prot, int flags,
           int fd, off_t offset);
Run Code Online (Sandbox Code Playgroud)

考虑一个10 MB的文件,我只需要映射它的一个子集,如2 MB.另外,我们假设我们从不尝试访问2 MB边界之外的内存.(这样做显然会产生影响.)


问:如果将length其设置为2或10 MB,这是否重要?

Ant*_*ala 5

length参数告诉应该将多少连续空间offset映射到内存中.与映射10M相比,仅映射长度为10M的文件的前2M不应具有不利的性能特征,除非您需要稍后更改映射以读取其他部分.

长度参数的一个原因是避免访问即使意外也不想访问的部件.另一个原因是如果你有一个6G文件和一个32位处理器,那么祝你好运,试图将所有6G映射到2-4G用户空间.