繁体   English   中英

std :: cout是否会影响计时器?

[英]Will std::cout affect timers?

我有一个图形程序,我想测量某些函数调用所花费的时间。 由于我不确定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的内部将使用某种“写入文件”系统调用,其中file是“标准输出”文件句柄-如果重定向了输出,则它可能是某种显示设备,窗口或文件。 当然,这可能会导致某种中断或其他进程正在运行(例如Windows中的“ cmd.exe”或Linux / Unix中的“ xterm”或类似名称)。 如果功能非常短,这种“干扰”可能足以改变结果-当然,您的网络浏览器醒来检查Facebook是否有任何新项目,电子邮件软件,甚至是同样有可能只是来自其他系统的网络也会产生类似的效果。 但是,在具有不错的多核处理器的现代系统中(只要系统尚未运行100%的cpu使用率),这些影响应该很小,并且并不能真正起到很大作用-无论我们是在谈论cout还是其他其他潜在因素。

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

从技术上讲, std::cout (以及大多数功能)会导致某些RAM页面被换出,或填充OS的缓冲区,或以其他方式为OS创建额外的负载。 但这不应该引起注意。

进程内部或OS内核中的任何其他(异步)工作都将在另一个线程中执行,因此您的程序不会受到太大的影响(前提是您拥有多核CPU,并且系统处于空闲状态)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM