在C中读取文件的最佳缓冲区大小

我必须使用read函数read C中的大文件。 我只是想知道在性能方面我们保留的缓冲区大小是否有所不同。 文件大小可能达到几十GB。

精简版。
这取决于。 在x86缓冲区大小为4096字节是一个很好的开始( 一页大小和高级格式块大小)。

更长的版本。
在UNIX中,它依赖于内核,libc,文件系统,硬件等。不仅适用于版本和编译选项,还适用于运行时可调参数(例如,预读设置)。

DIY。
测试一下! 有关确定一个特定系统的最佳读写缓冲区大小的直接方法,请参阅UNIX环境中的高级编程第3.9章“I / O效率”。

第一:肯定是磁盘逻辑/物理扇区大小的倍数,您可以使用hdparm进行检查。 这是一样的

提示:libc的fopen(3)fread(3)fwrite(3)等函数已经为你做了一些很好的缓冲。

另一个提示:如果你不需要流式传输整个文件,而是随机访问它的一部分,你可以试试mmap()