在Linux中读取文件的最快方法?

时间:2013-10-16 11:57:40

标签: c++ c linux linux-kernel memory-mapped-files

在Linux上,将文件读入字节数组/处理字节的最快方法是什么?这可能包括内存映射,sys调用等。我不熟悉许多特定于Linux的函数。

过去我使用过boost内存映射,但我需要更快的Linux特性而不是可移植性。

2 个答案:

答案 0 :(得分:4)

如果文件足够大,

mmap应该是访问文件内容的最快方法。设置内存映射需要初始成本,但是不需要将数据从页面缓存复制到用户空间就可以抵消。如果您想要文件的所有内容,将内存分配给您的程序的成本应该与mmap的成本大致相同。

一如既往,最好的选择是测试和基准测试。

答案 1 :(得分:2)

不要让自己被内存映射等懒惰的东西所迷惑。而是专注于你真正需要的东西。你真的需要将整个文件读入内存吗?然后,直接的打开方式,循环读取块以及关闭文件将尽可能快。

但通常你真的不想那样。相反,您可能想要读取特定部分,此处的块,块中的块,跳过文件,读取特定位置的块等等。

然后fseek仍然fread这些位置和{{1}}块将不会有值得一提的开销。但是使用内存映射让操作系统或库处理诸如内存分配等内容会更方便。但是,它不会更快地完成工作。