我想增加缓冲区大小以提高cout的性能(它是 通常重定向到磁盘)
我可以这样做:
std::cout.rdbuf()->pubsetbuf(some_buffer, buffer_size);
还
ios::sync_with_stdio(false);
这有意义吗?
编辑:我也在使用多个线程,所以我希望减少同步的需要。答案 0 :(得分:4)
我首先会检查将使更大缓冲区大小无关的刷新次数。
特别是看,如果你有很多cout<<你的代码中的endl并尝试用cout<<替换它们'\ n'相反,如果你不需要endl的刷新效果。
作为最后的手段,在您尝试“优化”之前寻找根本原因,例如尝试使用strace或类似的工具来查看实际发生的系统调用的数量。 (我希望这对你的问题有帮助)。
只有,如果所有这些都已经被照顾,更大的缓冲区大小实际上可以帮助减少系统调用的数量。
cout输出的另一个减慢是,它通常准备与多个线程同步输出,即使你只使用一个线程。这再次可以大大减慢I / O,因为没有使用更大缓冲区的开销。