快速文件读取

时间:2012-01-10 19:50:30

标签: c++ c linux gcc

如果我是对的,在Linux上(在C/C++, gcc/g++中),可以使用read(2)mmap(2)系统调用从常规文件中读取数据。

两个问题。内部read系统调用是否使用mmap?什么时候比第二个快,反之亦然?

2 个答案:

答案 0 :(得分:6)

如果您按顺序读取文件,我的默认选择是重复read进入较大的缓冲区。

如果你正在访问散布在大文件周围的一小部分数据,那么选择就不那么清楚,但是mmap可能会导致代码更易读(因为你可以编写代码,好像文件已经在记忆)。在这种情况下哪个会提供更好的表现很难说先验。

如果您正在编写性能关键代码,那么确定性能的唯一方法是通过对实际代码进行基准测试/分析。

答案 1 :(得分:3)

一般经验法则:

  • 如果您从头到尾依次读取文件,则可以使用read()而不会影响性能。

  • 如果您正在阅读具有随机访问权限的文件,则mmap()将比比较seek()/ read()组合获得更好的性能。

相关问题