为cout增加缓冲区

时间:2011-08-26 08:45:29

标签: c++ io buffer iostream stdio

引用Does setbuf() affect cout?

我想增加缓冲区大小以提高cout的性能(它是 通常重定向到磁盘)

我可以这样做:

std::cout.rdbuf()->pubsetbuf(some_buffer, buffer_size);

ios::sync_with_stdio(false);

这有意义吗?

编辑:我也在使用多个线程,所以我希望减少同步的需要。

1 个答案:

答案 0 :(得分:4)

我首先会检查将使更大缓冲区大小无关的刷新次数。

特别是看,如果你有很多cout<<你的代码中的endl并尝试用cout<<替换它们'\ n'相反,如果你不需要endl的刷新效果。

作为最后的手段,在您尝试“优化”之前寻找根本原因,例如尝试使用strace或类似的工具来查看实际发生的系统调用的数量。 (我希望这对你的问题有帮助)。

只有,如果所有这些都已经被照顾,更大的缓冲区大小实际上可以帮助减少系统调用的数量。

cout输出的另一个减慢是,它通常准备与多个线程同步输出,即使你只使用一个线程。这再次可以大大减慢I / O,因为没有使用更大缓冲区的开销。