2012-11-17 60 views
11

我必须使用read函数读取C文件中的大文件。我只是想知道在性能方面我们保留了什么样的缓冲区大小。文件大小可能会达到几十GB。用于读取文件的最佳缓冲区大小C

+0

当然缓冲区大小很重要,但“最佳”取决于。 –

+0

合理范围内越大越好。使用两个幂的缓冲区大小(或至少是512的倍数)会有一些小优点。 –

+0

@HotLicks你能解释一下为什么'512' –

回答

0

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

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

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

+0

如果没有其他指示('O_DIRECT' /'O_SYNC'),即使使用'open | read | write'(page cache + readahead),OS也会执行大量缓冲 – SaveTheRbtz

8

简短版本。
这取决于。在x86缓冲区大小为4096字节是一个很好的开始(一个page sizeAdvanced Format块大小)。

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

DIY。
测试它!请参阅Advanced Programing in UNIX Environment第3.9章“I/O效率”可以直接确定某个特定系统的最佳读写缓冲区大小。