在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是否重要?
答案 0 :(得分:5)
length
参数告诉应该从offset
开始的连续空间被映射到内存中。与映射10M相比,仅映射长度为10M的文件的前2M应该没有不利的性能特征,除非您稍后需要更改映射以读取其他部分。
使用length参数的原因之一是避免访问即使是偶然也不希望访问的部分。另一个原因是,如果您有一个6G文件并在32位处理器上,那么祝您尝试将所有6G映射到2-4G用户空间中是很幸运的。