使用mmap API时,内存映射长度的重要性是什么?

时间:2018-12-21 16:24:32

标签: c posix mmap

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

void *mmap(void *addr, size_t length, int prot, int flags,
           int fd, off_t offset);

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


问:length设置为2 MB还是10 MB是否重要?

1 个答案:

答案 0 :(得分:5)

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

使用length参数的原因之一是避免访问即使是偶然也不希望访问的部分。另一个原因是,如果您有一个6G文件并在32位处理器上,那么祝您尝试将所有6G映射到2-4G用户空间中是很幸运的。