首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >10毫秒C++执行时间

10毫秒C++执行时间
EN

Stack Overflow用户
提问于 2014-09-01 11:09:54
回答 2查看 333关注 0票数 0

我试图找出使用2e6项的"for循环“的确切执行时间。从g++为c++文件编译后,以下代码在10 is内运行。人们告诉我,优化代码是由C++编译器自动完成的,因此您得到了没有意义的执行时间。换句话说,由于变量a、b、c没有任何输出调用(如printf或cout<< ),所以优化的代码不会对"for循环“做任何操作,这就是为什么我在10 is内有很短的程序执行时间的原因。对吧?为什么他们说时间结果对"for循环“毫无意义。

请指教

代码语言:javascript
复制
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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-01 11:18:26

编译器可以以不改变任何可观察到的东西的任何方式改变程序,即所有输出等必须与未优化代码的输出完全相同。在您的示例中,编译器可能会注意到,循环后的abc的值从未被使用过,并且循环没有做任何其他事情,所以它最好将循环从程序中删除。

它还可以观察到变量的值直接依赖于max,并且只跳过最后一次迭代以外的所有迭代。

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

编辑:

我用g++ -O2测试了这个场景,循环被完全删除,根本不运行。

票数 2
EN

Stack Overflow用户

发布于 2014-09-01 11:17:00

运行时绝对是,而不是。这至少证明了一个重要的问题:优化器比给定的信用更聪明,而且它能够推断出循环没有副作用,所以它把它去掉了。

因此,即使配置文件的结果仅仅证明了这一点,它也是有意义的。

要解决你想要的:

我试图找出使用2e8项的"for循环“的确切执行时间。

如果没有可观察到的效果,for循环与2e8的执行时间可以是0。或者非常大,如果是的话。这就是为什么通常使用专用工具来分析实际代码的原因。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25604514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档