[英]std::cout, is binary a faster way to write output?
我目前正在用C ++编写模拟(在OSX上)。 最大的时间努力用于存储数据,其中输出是双对t和f(t)的表。
直到现在我使用(简化)代码:
ofstream ofs;
ofs.open("test");
for(int i = 0; i < 4e7; i++){
ofs << i;
}
ofs.close();
由于everthing存储在1和0中我的猜测是,使用二进制格式会更有时间效率。 但随后的变化(ios :: binary)并没有改善计算时间:
ofstream ofs;
ofs.open("test", ios::binary);
for(int i = 0; i < 4e7; i++){
ofs << i;
}
ofs.close();
我的猜错了还是我需要添加一些东西?
不,不是真的。 std::cout
链接到控制台,其速度主要取决于操作系统。
话虽这么说,有一些简单的技巧来加速控制台输出:
<<
call中输出。 这提高了我的输出在Windows控制台中的速度。 sync_with_stdio
取消同步C io库中的C ++流。 ios::binary
仅启用或禁用某些特定于操作系统的转换,从文本到二进制表示并返回。 例如,Windows将'\\n'
表示为一对字节(13,10),而在UNIX中它表示为单个字节(10)。 在你的情况下, ios::binary
完全没有区别。
您可以提高性能的方法是为您的数据使用一些低级表示,这样您就不必将整数或双精度转换为文本表示形式并返回。 将纯数据存储在数组中并通过大块将它们写入文件将是最快的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.