首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C++中性能不佳。怎么啦?

在C++中性能不佳。怎么啦?
EN

Stack Overflow用户
提问于 2018-06-22 05:17:32
回答 1查看 115关注 0票数 -8

为什么这段代码在C++中需要3.87秒?

#include <stdio.h>
#include <time.h>

int main() {

    int iterations=999999;
    int size=1000;
    int i,k;

    clock_t tStart = clock();
    for (k=0;k<iterations;k++){
        for(i=0; i<size; i++){
          //ANYTHING (the content is not important)
        }
    }

    printf("Time taken: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
    return 0;
}

我在Ubuntu 16上的Eclipse上使用它。这是Eclipse用来编译它的命令:

g++ -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/myexample.d" -MT"src/myexample.o" -o "src/myexample.o" "../src/myexample.cpp"

我在Java上尝试了同样的代码,只需要0.006秒。

我做错了什么?

谢谢!

编辑

对不起,我不想说Java比C++更好。我只是希望在C++中获得更好的结果,并且我想知道为什么我获得了糟糕的性能,所以我尝试了用Java语言编写相同的代码。

已解决的

使用-O3,我得到了毫秒。

再次编辑

是的,我知道这是一个嵌套循环,但不用担心。我知道我在做什么(代码被简化以阐明问题,在完整版本中它要复杂得多)。错误在编译器命令中。阅读@chqrlie答案。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-22 05:26:58

您显式地要求编译器使用-O0生成未优化的代码。结果确实相当慢,因为嵌套的循环没有得到优化。java编译器可能会这样做,并删除空循环,这是一个相当容易的优化。如果您可以要求java编译器生成未优化的字节代码,并阻止运行时对其执行JITing操作,结果肯定会更慢。

您可以使用Godbolt来查看优化器的效果,将-O0更改为-O1-O2-O3https://godbolt.org/g/CyWuhB

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

https://stackoverflow.com/questions/50977557

复制
相关文章

相似问题

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