在读取文件时,缓冲区大小是否会影响时间成本?

era*_*ros 1 c++ file-io buffer

在读取文件时,我有两个关于缓冲区大小的选项.

char* buffer = new char[aBlock];
myFile.read(buffer,aBlock);
Run Code Online (Sandbox Code Playgroud)

和,

char* buffer = new char;
while (!myFIle.eof())
    myFile.read(buffer,1);
Run Code Online (Sandbox Code Playgroud)

是否会有相当大的时间成本差异?请注意,作为缓冲区,我char* buffer在代码中指的是缓冲区,我不是在谈论OS文件缓冲区

wal*_*lyk 5

是的会有.在所有实际操作系统中,进行i/o的价格比具有较少可用内存的权衡要高得多.实际的缓冲区大小比预期的要小得多.一个FILE *512字节的C运行时库默认缓冲区大小非常好 - 实际上对于它使用的多种情况确实很好.这是针对Unix V6上的65,536字节内存空间而开发的(c.1978).

仔细测量吞吐量,CPU负载和整体系统负载以优化缓冲区大小总是让我选择1024到16384字节范围内的缓冲区大小.唯一的例外是文件略大于该范围,在这种情况下,当内存可用时,将整个文件保存在内存中是最佳的.