简单来说,ostream中的flush()函数的作用是将缓冲区中的数据立即写入输出设备。

6

缓冲比原始吞吐量更快:http://en.wikipedia.org/wiki/Data_buffer。该文章中的过山车比喻实际上非常好。 - Corbin
2个回答

28
很有可能,“flush”这个词来源于现实生活中你要冲洗的东西,比如厕所...
那么让我们用一个厕所类比来解释:每次新的东西落到马桶里时都冲一次是非常费时间和浪费水的。这在今天每个人都在努力环保的情况下是个大问题。所以你可以通过将它们全部保存起来,并在最后一次性地冲洗来缓冲它们。如果出于任何原因,在未完成的情况下你也可以随时“过早地”在中途冲洗一次。
C++流(等其他内容)的工作方式基本相同。为了降低开销并提高性能,流会缓存其内容并定期“刷新”它。缺点是你可能会遇到“延迟”行为,就像在这个问题中一样:为什么printf调用后不会刷新,除非格式字符串中有换行符?。所以这就是为什么要使用 flush():允许你覆盖缓冲。

20
希望不需要用图片和基准测试来补充说明。 - Mysticial

1

每次一个字符地在硬盘上写入文件是低效的。每个字符都通过网络发送数据包也是低效的。因此,流通常被缓存。flush()只是一种在流式传输期间“手动”控制何时刷新缓存并真正发送或写入内容的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接