我试图了解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';
}
}
答案 0 :(得分:1)
要真正回答您的问题,在实践中很难衡量差异。这只是一个比较( if )与放弃对OS进行I / O并与硬件进行通信的比较。
涉及打印时,从缓冲到分支预测有多个抽象层。实际影响取决于多个因素。即使是完全相同的程序的多次运行也会显示出执行时间的变化。
您需要设计一个仔细而聪明的实验来可靠地衡量检查的效果。
这里解决您的问题的方法是,最肯定的是,差异低于测试精度,也可能低于执行噪声。最重要的是,CPU体系结构实际上可以消除差异,关键词是:预取,分支预测和(其中)著名的投机执行。