使用 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.
在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.