如果我是对的,在Linux上(在C/C++, gcc/g++
中),可以使用read(2)
或mmap(2)
系统调用从常规文件中读取数据。
两个问题。内部read
系统调用是否使用mmap
?什么时候比第二个快,反之亦然?
答案 0 :(得分:6)
如果您按顺序读取文件,我的默认选择是重复read
进入较大的缓冲区。
如果你正在访问散布在大文件周围的一小部分数据,那么选择就不那么清楚,但是mmap
可能会导致代码更易读(因为你可以编写代码,好像文件已经在记忆)。在这种情况下哪个会提供更好的表现很难说先验。
如果您正在编写性能关键代码,那么确定性能的唯一方法是通过对实际代码进行基准测试/分析。
答案 1 :(得分:3)
一般经验法则:
如果您从头到尾依次读取文件,则可以使用read()而不会影响性能。
如果您正在阅读具有随机访问权限的文件,则mmap()将比比较seek()/ read()组合获得更好的性能。