我尝试找出2e6迭代的“ for循环”的确切执行时间。
从g ++编译c ++文件后,以下代码在10毫秒内运行。
人们告诉我这是C ++编译器自动完成的优化代码,因此您
获得无意义的执行时间。换句话说,因为没有任何输出调用
例如对于变量a,b,c的printf或cout <那个“ for循环”,这就是为什么我在10ms内实现了非常短的程序执行时间的原因。对 ?为什么他们说时间结果对于“ for loop”没有意义。

请指教

int main(){
int max = 2e6;
int a,b,c;
// CODE YOU WANT TO TIME
    int start = getMilliCount();
    for (int i = 0; i < max; i++) {
    a = 1234 + 5678 + i;
    b = 1234 * 5678 + i;
    c=1234/2+i;
   }
int milliSecondsElapsed = getMilliSpan(start);
printf("\n\nElapsed time = %u milliseconds %d\n", milliSecondsElapsed,max);
    return 0;
}

最佳答案

编译器可以通过不改变任何可观察内容的任何方式来更改程序,即所有输出等必须与未优化代码的输出完全相同。在您的示例中,编译器可能会注意到循环之后的abc的值从未使用过,并且循环没有执行其他操作,因此也可能从程序中删除了该循环。

它还可以观察到,变量的值直接取决于max,并且仅跳过最后一次迭代。

在这两种情况下,结果都不取决于max。它仍然不是没有意义的,仅意味着您低估了编译器。

编辑:

我用g++ -O2测试了这种情况,循环被完全删除并且根本不运行。

关于c++ - 10毫秒C++执行时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25604514/

10-11 17:03