17

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

4

2 回答 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 回答