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文件缓冲区
是的会有.在所有实际操作系统中,进行i/o的价格比具有较少可用内存的权衡要高得多.实际的缓冲区大小比预期的要小得多.一个FILE *
512字节的C运行时库默认缓冲区大小非常好 - 实际上对于它使用的多种情况确实很好.这是针对Unix V6上的65,536字节内存空间而开发的(c.1978).
仔细测量吞吐量,CPU负载和整体系统负载以优化缓冲区大小总是让我选择1024到16384字节范围内的缓冲区大小.唯一的例外是文件略大于该范围,在这种情况下,当内存可用时,将整个文件保存在内存中是最佳的.