c++ - std::cout,二进制是一种更快的写入输出的方法吗?

标签 c++ binary ofstream

我目前正在用 C++(在 OSX 上)编写模拟。最大的时间精力用于存储数据,其中输出是双对 t 和 f(t) 的表。

到目前为止,我使用的是(简化的)代码:

ofstream ofs;
ofs.open("test");
for(int i = 0; i < 4e7; i++){
    ofs << i;
}

ofs.close();

因为一切都存储在 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. 创建一个字符串流缓冲区并将其输出到一个 << 中称呼。这大大提高了我的输出到达 Windows 控制台的速度。
  2. 使用 sync_with_stdio 从 C io 库中取消同步 C++ 流.
  3. 如果您不需要输出可读,您可以写入原始字节并取消任何数字格式,但这是一个非常特殊的情况。

关于c++ - std::cout,二进制是一种更快的写入输出的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20311660/

相关文章:

c++ - 如何避免在高内存使用应用程序中耗尽内存? C/C++

c++ - GLSL 镜面光照

java - 反转二进制字符串java的位

c++ - 删除部分文本文件 C++

c++ - 创建二进制文件时出现问题

c++ - 对象的破坏导致程序崩溃

c++ - 有人可以解释一下吗?我幸运地猜测,为什么通过引用传递这个变量而不是值会弄乱我的程序?

java - 计算 Java 中的前导零 (clz) 或前导零 (nlz) 的数量

C++ 找到二进制数的最高有效位?

c++ - 奇怪的错误 : cannot convert from 'int' to 'ios_base::openmode'