std :: cout,二进制是一种更快的写输出方式吗?

时间:2013-12-01 11:31:57

标签: c++ binary ofstream

我目前正在用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();

我的猜错了还是我需要添加一些东西?

2 个答案:

答案 0 :(得分:2)

不,不是真的。 std::cout链接到控制台,其速度主要取决于操作系统。

话虽如此,有一些简单的技巧可以加速控制台输出:

  1. 创建一个字符串流缓冲区并在一次<<调用中输出。这提高了我的输出在Windows控制台中的速度。
  2. 使用sync_with_stdio
  3. 取消同步C io库中的C ++流
  4. 如果您不需要输出可读,您可以编写原始字节并取消任何数字格式,但这是一个非常具体的情况。

答案 1 :(得分:1)

ios::binary仅启用或禁用某些特定于操作系统的转换,从文本转换为二进制表示并返回。例如,Windows将'\n'表示为一对字节(13,10),而在UNIX中,它表示为单个字节(10)。在您的情况下,ios::binary完全没有任何区别。

提高性能的方法是为数据使用一些低级表示,这样就不必将整数或双精度转换为文本表示形式。将纯数据存储在数组中并通过大块将它们写入文件将是最快的方法。