在C ++中执行时间和检查流状态

我试图了解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';

    }
}
qiao799 回答:在C ++中执行时间和检查流状态

要真正回答您的问题,在实践中很难衡量差异。这只是一个比较( if )与放弃对OS进行I / O并与硬件进行通信的比较。

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

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

这里解决您的问题的方法是,最肯定的是,差异低于测试精度,也可能低于执行噪声。最重要的是,CPU体系结构实际上可以消除差异,关键词是:预取分支预测和(其中)著名的投机执行

本文链接:https://www.f2er.com/3117814.html

大家都在问