C ++定时相同的循环给出不同的结果

时间:2018-12-01 23:16:03

标签: c++ timing chrono

有人可以解释为什么多次运行此代码会产生非常可变的结果吗? 除非我做错了什么,否则它应该衡量我的系统(MacOSX Sierra,Xcoe9.2)运行空的for循环1000次所花费的时间。

#include <iostream>
#include <chrono>

void printstuff (){
    for (int i = 0; i < 1000; ++i){
    //empty loop
    }
}

int main(int argc, const char * argv[]) {

    auto time1 = std::chrono::high_resolution_clock::now();
    printstuff();
    auto time2 = std::chrono::high_resolution_clock::now();

    std::cout << std::chrono::duration_cast<std::chrono::nanoseconds>(time2 - time1).count() << std::endl;

    return 0;
}

1 个答案:

答案 0 :(得分:1)

您如何编译该代码?您正在使用哪些标志?

如果您正在使用任何级别的优化(使用优化标志之一,例如,请参见:https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html for gcc),那么函数printstuff()会被编译为零指令,如您在此处看到的:{ {3}}

如果您不使用任何优化标志,则该循环仍将执行得太快,以至于您无法测量任何东西(您很有可能正在测量噪声)。

如果您想对代码进行基准测试,我会建议您https://godbolt.org/z/gXq-mG