我有一个图形程序,我想测量某些函数调用所花费的时间。由于我不确定 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/