繁体   English   中英

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

[英]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链接到控制台,其速度主要取决于操作系统。

话虽这么说,有一些简单的技巧来加速控制台输出:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM