用C++读/写文件的快速跨平台算法

use*_*883 5 c++ file-io stl cross-platform memory-mapped-files

我想提出一个看似简单的问题,我无法找到答案.是否有一个FAST现代算法用于文件输入和/或输出,可以使用所有符合标准的C++编译器进行编译,适用于所有操作系统而无需外部库?

  1. 我发现最快的方法是使用内存映射文件,但这不会导致我们希望在所有平台上运行相同的代码
  2. 我们不能使用像Win32 API那样的API,因为它会使它特定于平台
  3. 我不想使用c,我希望算法只是纯c ++代码与stl如果可行,而不是一些丑陋的c与混合asm hack/trick
  4. 不属于标准c ++的框架或外部库不应该像wxWidgets,Qt,MFC等那样使用.
  5. 这整个问题的重要优势在于算法尽可能,类似于使用内存映射文件的速度,甚至更快,但我知道这是不可能的

除了我之外,你有没有看过其他人研究过的东西?这样的算法甚至可能吗?

谢谢你的任何建议

Mic*_*urr 9

有以下限制:

可以使用所有符合标准的C++编译器进行编译,适用于所有操作系统而无需外部库吗?

您几乎限制自己使用标准库文件IO功能.也许POSIX函数(取决于你正在考虑的"所有符合标准的C++编译器"的子集).

如果它们不够快,你将不得不开始放弃一些限制.

  • 一次读取整个文件仍然比将其映射到内存要慢. (2认同)

Ano*_*on. 9

这与"算法"无关.

在将数据写入文件时,您受操作系统的支配 - 内存映射文件"快速",因为您只是写入内存,而操作系统会在自己的时间内将其同步.如果操作系统不支持它,那么在这方面你运气不好 - 除非你想要实现自己的内存映射层.

顺便提一下,POSIX有mmap,所以如果你限制自己使用POSIX兼容系统,那你就没事了.