11

是否有一种普遍接受的最快技术用于在 C++ 中将文件读入内存?

我只会阅读文件。

我已经看到 boost 有一个实现,我在这里看到了其他几个实现,但我想知道什么被认为是最快的?

先感谢您

万一这很重要,我正在考虑最大 1GB 的文件,这适用于 Windows。

4

4 回答 4

6

使用内存映射文件,也许使用boost 包装器来实现可移植性。

如果要读取大于虚拟地址空间的空闲连续部分的文件,可以随意移动文件的映射部分。

于 2012-05-31T15:37:31.383 回答
4

考虑为您的情况使用内存映射文件,因为这些文件的大小可达 1 GB。

在这里你可以从 win32 API 开始:

MSDN 页面上还有其他几个有用的 API。

于 2012-05-31T15:37:03.483 回答
2

如果内存映射文件不足以满足您的应用程序,并且文件 I/O 是您的瓶颈,那么使用I/O 完成端口来处理文件上的异步 I/O 将是您在 Windows 上获得的最快速度。

I/O 完成端口为在多处理器系统上处理多个异步 I/O 请求提供了一个高效的线程模型。当一个进程创建一个 I/O 完成端口时,系统会为请求创建一个关联的队列对象,这些请求的唯一目的是为这些请求提供服务。处理许多并发异步 I/O 请求的进程可以通过将 I/O 完成端口与预先分配的线程池结合使用,而不是通过在接收 I/O 请求时创建线程来更快、更有效地完成此操作。

于 2012-05-31T15:43:31.613 回答
1

一般来说,mmap就是这样。但是在 Windows 中,他们发明了自己的方法,请参阅“文件映射”。Boost 具有Memory-Mapped Files库,可将两种方式都包装在可移植的代码堆中。

此外,如果您想要快速,则必须针对您的用例进行优化。仅仅将文件内容映射到内存是不够的。例如,您确实可能不需要内存映射文件,最好使用异步文件 I/O。许多问题有许多解决方案。

于 2012-05-31T15:39:32.693 回答