如何在标准C++/C++11(无POSIX函数)中优化std::ifstream和std::ofstream的读写速度?(1 <-由于有多个问题,这些数字标识不同的点)
我不确定缓冲区的作用,请问以下内容是否正确:
对于读取:文件的大部分预加载到内存中(因此缓冲区大小定义了该大部分的大小)(2)
对于写入:数据先写入内存,一旦缓冲区已满,则从内存传输到文件系统(3)
如何设置std::ifstream和std::ofstream的缓冲区大小?(4)
考虑到我要处理非常大的二进制文件(几十GB),并且文件系统通常最适合大量读写,我可以定义100MB之类的缓冲区大小吗?如果会降低性能,为什么?(5)
最后,是否默认缓冲区“智能”,即ifstream/ofstream将检测您要读取/写入文件的数据量,并调整缓冲区大小以提供最大速度?(6)
我不确定缓冲区的作用,请问以下内容是否正确:
对于读取:文件的大部分预加载到内存中(因此缓冲区大小定义了该大部分的大小)(2)
对于写入:数据先写入内存,一旦缓冲区已满,则从内存传输到文件系统(3)
如何设置std::ifstream和std::ofstream的缓冲区大小?(4)
考虑到我要处理非常大的二进制文件(几十GB),并且文件系统通常最适合大量读写,我可以定义100MB之类的缓冲区大小吗?如果会降低性能,为什么?(5)
最后,是否默认缓冲区“智能”,即ifstream/ofstream将检测您要读取/写入文件的数据量,并调整缓冲区大小以提供最大速度?(6)
std::ostream
,性能峰值大约在64 KiB的缓冲区大小处。 - wilx