我必须使用read
函数在C中读取大文件。我只是想知道在性能方面我们保留的缓冲区大小是否有所不同。文件大小可能达到几十GB。
答案 0 :(得分:9)
简短版本。
这取决于。在x86缓冲区大小为4096字节是一个良好的开端(一个page size和Advanced Format块大小。)
更长版本。
在UNIX中,它依赖于内核,libc,文件系统,硬件等。不仅在版本和编译选项上,而且在运行时可调参数上(例如,预读设置)。
DIY。
测试一下!有关确定一个特定系统的最佳读写缓冲区大小的直接方法,请参阅Advanced Programing in UNIX Environment第3.9章“I / O效率”。
答案 1 :(得分:0)
首先:肯定是磁盘逻辑/物理扇区大小的倍数,您可以使用hdparm进行检查。这是相同的
提示:libc的fopen(3)
,fread(3)
,fwrite(3)
等功能已经为您做了一些很好的缓冲。
另一个提示:如果您不需要流式传输整个文件,而是随机访问部分文件,则可以尝试mmap()
。