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

What is the significance of the memory-map length when using the mmap API?

在POSIX,你有这么好的mmap()API。文档并不清楚 length 的值是否对 memory/performance 有影响。请指教!

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 有关系吗?

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

长度参数的一个原因是为了避免访问您不想访问的部分,即使是意外访问也是如此。另一个原因是,如果您有一个 6G 文件并且在 32 位处理器上,那么尝试将所有 6G 映射到 2-4G 用户时祝您好运 space.