c++中的执行时间和检查流状态

Execution time and checking stream state in c++

本文关键字:检查 状态 执行时间 c++      更新时间:2023-10-16

我正在努力理解C++中的流。我有下面的代码,我在其中多次打印消息,并试图在检查状态是否良好时发现执行时间是否存在差异。当然,我用了时间,但我找不到确切的答案,因为有时检查会更快,有时不是。我的直觉是,由于检查是一项额外的操作,它应该总是需要(稍微(更长的时间。有什么实际的差异吗?还是只是随机的?

#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
ostream &out = cout;  //initialize ostream object
size_t arg = stoul(argv[1]); //convert char to size_t
for (size_t cnt = 0; cnt != arg; ++cnt)
{
// if (out.good()) //check goodbit
out << "Nr. of command line argument " << argc << 'n';
}
}

问题的真正答案是,在实践中很难衡量差异。这只是一个比较(if(与放弃执行操作系统进行I/O和与硬件通信的比较。

当涉及到打印时,有多层抽象,从缓冲到分支预测。实际影响取决于多种因素。即使是完全相同程序的多次运行也会显示出执行时间的变化。

你需要设计一个仔细而聪明的实验来可靠地测量检查的效果。

这里的问题是,最确定的是,差异低于您的测试精度,可能低于执行噪音。除此之外,CPU架构实际上可以消除差异,关键字是:预取分支预测和(in(著名的推测执行