Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将文件读入内存的最快技术? 是否有一个被普遍接受的最快的技术,用于在C++中读取文件到内存中?_C++_Windows_File_Memory - Fatal编程技术网

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

将文件读入内存的最快技术? 是否有一个被普遍接受的最快的技术,用于在C++中读取文件到内存中?,c++,windows,file,memory,C++,Windows,File,Memory,我只会读文件 我已经看到boost有一个实现,我也在这里看到了其他几个实现,但我想知道什么是最快的 先谢谢你 如果有必要,我会考虑使用1GB以下的文件,这是针对windows的。考虑在您的情况下使用,因为文件大小可能会高达1GB 在这里,您可以从win32 API开始: MSDN页面上还有其他一些有用的API。使用,可能是为了便于移植 如果要读取的文件大于虚拟地址空间的可用连续部分,则可以随意移动文件的映射部分。一般来说,是这样的。但在Windows中,他们发明了自己的方法,请参见。

我只会读文件

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

先谢谢你

如果有必要,我会考虑使用1GB以下的文件,这是针对windows的。

考虑在您的情况下使用,因为文件大小可能会高达1GB

在这里,您可以从win32 API开始:

MSDN页面上还有其他一些有用的API。

使用,可能是为了便于移植

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

一般来说,是这样的。但在Windows中,他们发明了自己的方法,请参见。Boost有一个库,它将两种方式都封装在一堆可移植的代码下


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

在事件中,内存映射文件不适合您的应用程序,而文件I/O是您的瓶颈,在Windows上,使用来处理文件上的异步I/O将是最快的速度

I/O完成端口为 在多处理器上处理多个异步I/O请求 系统。当进程创建I/O完成端口时,系统 为仅用于以下目的的请求创建关联的队列对象: 为这些请求提供服务。处理多个并发进程的进程 异步I/O请求可以通过 将I/O完成端口与预先分配的线程结合使用 而不是在线程接收I/O请求时创建线程


最快的方法是读取大小与磁盘缓冲区对齐的连续块(例如,如果磁盘有8MB缓冲区,则为8MB)。这真的重要吗?你确定吗?您是否分析了您的代码并证明读取文件需要多长时间是一个问题?如果是这样,您可能需要使用特定于操作系统的功能来获得最佳性能。如果您能确切地说出您想要对该文件执行的操作,这会有所帮助。可能是重复的,但读取单个文件对我来说并不像»许多并发异步I/O请求«。同意,如果这是针对单个小于1GB的文件,那就太过分了。我不想假设OP想要什么,基于q的模棱两可的文本。我必须为那个boost库预编译头,还是为您完成?我记得有些boost库需要单独编译?@Porcupine:文档中说“要管理映射文件,只需包含以下标题:
#include
”,因此我认为它是一个只包含标题的库。好的,它肯定是一个只包含标题的库,具体如下所述:“没有必要编译Boost.Interprocess,因为它是一个只有头的库。只需在编译器包含路径中包含Boost头目录。“这只是istream吗?istream是我想要的吗?@Porcupine:它不是
istream
。通过链接了解它是什么。如果我用几句话解释它,那么它对你没有任何好处,而且可能不准确。