我目前正在用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();
我的猜错了还是我需要添加一些东西?
答案 0 :(得分:2)
不,不是真的。 std::cout
链接到控制台,其速度主要取决于操作系统。
话虽如此,有一些简单的技巧可以加速控制台输出:
<<
调用中输出。这提高了我的输出在Windows控制台中的速度。sync_with_stdio
。答案 1 :(得分:1)
ios::binary
仅启用或禁用某些特定于操作系统的转换,从文本转换为二进制表示并返回。例如,Windows将'\n'
表示为一对字节(13,10),而在UNIX中,它表示为单个字节(10)。在您的情况下,ios::binary
完全没有任何区别。
提高性能的方法是为数据使用一些低级表示,这样就不必将整数或双精度转换为文本表示形式。将纯数据存储在数组中并通过大块将它们写入文件将是最快的方法。