我必须使用read
函数读取 C 中的大文件。我只是想知道我们在性能方面保留的缓冲区大小是否有任何区别。文件大小可能达到数十 GB。
问问题
9817 次
2 回答
11
精简版。
这取决于。在 x86 上 4096 字节的缓冲区大小是一个好的开始(一个页面大小和高级格式块大小)。
更长的版本。
在 UNIX 中,它取决于内核、libc、文件系统、硬件等。不仅取决于版本和编译选项,还取决于运行时可调参数(例如预读设置)。
DIY。
测试它!请参阅UNIX 环境中的高级编程第 3.9 章“I/O 效率”,了解为特定系统确定最佳读写缓冲区大小的直接方法。
于 2012-11-17T18:44:19.310 回答
0
首先:当然,磁盘逻辑/物理扇区大小的倍数,您可以使用 hdparm 检查。这是一样的
提示:libc 的fopen(3)
, fread(3)
, fwrite(3)
, 等函数已经为你做了一些很好的缓冲。
另一个提示:如果您不需要流式传输整个文件,而是随机访问其中的一部分,您可以尝试使用mmap()
它。
于 2012-11-17T18:17:35.117 回答