c++ - std::cout 会影响计时器吗?

标签 c++ performance timing cout

我有一个图形程序,我想测量某些函数调用所花费的时间。由于我不确定 std::cout 在幕后如何工作,我想问一下在计时器调用之间对其进行调用是否会影响性能。我知道它本身很慢,所以我自然不会将它放在我正在测量的函数中,但是它是否是缓冲/异步的,以便在调用返回后效果会以任何方式持续?我想做这样的事情(伪代码):

timer->Start();
RunSomeFunction();
timer->Stop();
std::cout << timer << std::endl; // Could this affect the next timer event?
timer->Start();
RunAnotherFunction();
timer->Stop();
std::cout << timer << std::endl;
// etc

最佳答案

简而言之,没有。

更长的答案:但是,这确实取决于 cout 将在哪里以及您实际运行的系统。

通常,cout的内部将使用某种“写入文件”系统调用,其中文件是“标准输出”文件句柄 - 可能是某种显示设备、窗口或文件(如果输出被重定向)。这当然可能会导致某种中断或其他地方运行的某些进程(例如 Windows 中的“cmd.exe”或 Linux/Unix 中的“xterm”或类似的进程)。如果函数非常短,这种“干扰”可能足以改变结果 - 当然,你的网络浏览器也有可能醒来检查 Facebook 是否有任何新项目,或者你的电子邮件软件,甚至仅来自其他系统的网络也具有类似的效果。然而,在具有不错的多核处理器的现代系统中(只要系统尚未运行 100% cpu 使用率),这些影响应该相当小,并且不会真正造成太大影响 - 无论我们是在谈论 cout 或任何其他潜在因素。

编辑:此外,对于非常敏感的代码,调用cout(或任何其他超过几行长的函数[或循环读取大块内存,即使几行])会影响缓存内容,这可能会影响代码的执行。

关于c++ - std::cout 会影响计时器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16461752/

相关文章:

c++ - asio 周期性定时器

python - c++中python "type(<name>, <bases>, <dict>)"的等价物是什么?

c++ - 原子和 std::mutex 的成本是否会影响我的多线程 RLNC 编码性能

python - python : multiple OR or IN in if statement? 中最好的方法是什么

java - java中的毫秒计时

node.js - 如何在 Node js 上接收诸如 dns 查找时间、页面加载时间等数据?

c++ - 序列点、条件和优化

c++ - 如何确定 PdhExpandWildCardPath 结果中的主要网络适配器?

c# - 衡量C#中单实例生命周期的性能

c - 函数运行时的非线性行为