【发布时间】:2016-12-09 23:25:35
【问题描述】:
我正在尝试更好地了解 mmap。我最近在相关的 stackoverflow 问题(引用如下)中阅读了这个已接受答案的这一部分:mmap and memory usage
假设您读取了 100MB 的数据块,并根据初始 1MB的头数据,你要的信息位于offset 75MB,所以你不需要 1~74.9MB 之间的任何东西!你已经读过了 只是为了让你的代码更简单。使用 mmap,您只会 读取您实际访问过的数据(四舍五入 4kb,或操作系统页面 大小,主要是 4kb),所以它只会读取第一个和 第 75 MB。
我了解 mmap 的大部分好处(不需要上下文切换、不需要交换内容等),但我不太了解这个偏移量。如果我们不使用 mmap 并且我们需要第 75 MB 偏移处的信息,那么我们不能使用标准 POSIX 文件 I/O 调用而不使用 mmap 来做到这一点吗?为什么 mmap 在这里正好有帮助?
【问题讨论】:
-
mmap()往往是一个被高估的解决方案。阅读 Linus Torvalds 本人的 this post,这是对有人抱怨mmap()访问数据所花费的时间是简单使用read()的三倍的回应。
标签: mmap