C ++ ios :: out文件流标志:为什么它会影响性能?

时间:2012-11-30 22:59:26

标签: c++ ios filestream out

我的程序正在将uint16_t的大数字(一次250,000)写入文件。出于某种原因,设置ios :: out标志(不必要,因为VS2010会自动设置它)导致性能下降大约10倍。 (见前/后)。知道如何设置可能导致如此巨大性能差异的标志是什么意思?

在:

fileoutput.flags(ios::out); 

Before

后:

//fileoutput.flags(ios::out);  

After

2 个答案:

答案 0 :(得分:5)

flags应该用于设置流的格式标志,例如输出是左对齐还是右对齐,或者布尔值应该打印为数字或字符串,因此您不能使用它来设置打开模式流和实际调用fileoutput.flags(std::ios::out)是一个带有无效参数的调用。错误的可能原因是你的实现值std::ios::out等于std::ios::unitbuf导致每个插入的缓冲区刷新,这肯定会导致巨大的性能损失。

答案 1 :(得分:3)

flags函数不设置一个标志。它会立即更改所有标志。要修改一个标志,您应该使用setf / unsetf。