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

Ama*_*tam 15 c io

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

Sav*_*btz 10

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

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

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


Met*_*tiu 0

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

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

另一个提示:如果您不需要流式传输整个文件,而是随机访问其中的某些部分,您可以尝试mmap()使用它。