是否有一种普遍接受的最快技术用于在c ++中将文件读入内存?
我只会阅读该文件。
我看过boost有一个实现,我在这里看到了其他一些实现,但我想知道什么是最快的?
提前谢谢
如果重要,我正在考虑高达1GB的文件,这是针对Windows的。
答案 0 :(得分:6)
使用memory-mapped files,可能使用boost wrapper进行移植。
如果要读取大于虚拟地址空间的空闲连续部分的文件,可以随意移动文件的映射部分。
答案 1 :(得分:4)
答案 2 :(得分:2)
如果内存映射文件不适合您的应用程序,并且文件I / O是您的瓶颈,使用I/O completion port处理文件上的异步I / O将是您可以获得的最快速度视窗。
I / O完成端口为其提供了有效的线程模型 在多处理器上处理多个异步I / O请求 系统。当进程创建I / O完成端口时,系统 为唯一目的的请求创建关联的队列对象 为这些请求提供服务。处理许多并发的进程 异步I / O请求可以更快速有效地执行此操作 将I / O完成端口与预先分配的线程结合使用 池,而不是在收到I / O请求时创建线程。
答案 3 :(得分:1)
一般来说,mmap就是这样。但在Windows中他们发明了自己的方法,请参阅"File Mapping"。 Boost有Memory-Mapped Files库,它可以在一堆便携式代码下包含两种方式。
此外,如果您想要快速,则必须针对您的用例进行优化。仅将文件内容映射到内存是不够的。例如,确实可能不需要内存映射文件,最好使用异步文件I / O.许多问题有很多解决方案。