我想知道将新行输出到控制台的最有效的性能方式是什么。请解释为什么一种技术更有效。在性能方面高效。
例如:
cout << endl;
cout << "\n";
puts("");
printf("\n");
这个问题的动机是我发现我的自写循环带有输出,我需要在循环的所有迭代之后输出一个新行。我试图找出什么是最有效的方法来做到这一点,假设没有其他问题。这种认为其他一切都不重要的假设可能是错误的。
原文由 Harrison Tran 发布,翻译遵循 CC BY-SA 4.0 许可协议
这个问题的答案真的是“取决于”。
孤立地-如果您要测量的只是将
'\n'
字符写入标准输出设备的性能,而不是调整设备,不更改缓冲发生的内容-那么很难击败诸如问题是这并没有取得太大的成就——它所做的一切(假设输出到屏幕或可见的应用程序窗口)只是将光标向下移动到屏幕上,然后将先前的输出向上移动。对于您的程序的用户来说,这并不完全是一种有趣或有价值的体验。因此,您不会孤立地执行此操作。
但是,如果我们不单独输出换行符,什么会影响性能(无论您如何衡量)?让我们来看看;
stdout
(或std::cout
)的输出默认被缓冲。为了使输出可见,选项包括关闭缓冲或让代码定期刷新缓冲区。也可以使用stderr
(或std::cerr
),因为默认情况下不缓冲 - 假设stderr
也被定向到控制台,并输出到它具有与stdout
相同的性能特征。stdout
andstd::cout
are formally synchronised by default (eg look upstd::ios_base::sync_with_stdio
) to allow mixing of output tostdout
andstd::cout
(同样适用于stderr
和std::cerr
)以上只是一个选择,但有许多因素可以决定什么可能被视为或多或少的性能。