【发布时间】:2010-11-05 08:45:02
【问题描述】:
如果有人在优化代码、实现的清晰度、效率和可移植性方面证明他们的设计权衡是合理的,该如何选择?
与此问题相关的示例可能是大文件处理,其中“大文件”是“相当几 GB”的问题,可以使用随机访问方法进行简化。
读取和修改此文件的方法可能是:
- 无论如何都要使用流,并寻找所需的位置 - 可移植,但可能很慢,并且不清楚 - 这几乎适用于所有操作系统。
- 将文件的相关部分映射为一个大块。例如,为每个块映射一个 50MB 的文件块进行处理 - 这适用于许多操作系统,具体取决于为该系统实现 mmap 的细微之处。
- 只需 mmap 整个文件 - 这需要 64 位操作系统,是实现此功能的最有效和最清晰的方法,但不适用于 32 位操作系统。
【问题讨论】:
-
mmap 非常便携。只要虚拟内存可用,它就可以在每个主要操作系统(包括嵌入式操作系统)上以某种形式使用。在虚拟内存不可用的系统上,mmap 调用可能可用,但在性能方面通常不是很好,并且没有完全相同的行为,包括脏页。
-
令牌:多 GB 文件的虚拟内存在 32 位系统上肯定不可用。
-
您不必一次映射整个文件。正如 OP 所说,您可以一次映射一块。
标签: portability