首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在gcc中使用O2时,如何将此向量优化10倍?

在gcc中使用O2时,如何将此向量优化10倍?
EN

Stack Overflow用户
提问于 2014-03-17 14:25:08
回答 2查看 149关注 0票数 0

这是我的代码:

代码语言:javascript
复制
while (vector0.size())
{
    for (ii = vector0.begin(); ii != vector0.end(); ii++) 
        if  (table[*ii] > table[*max]) max = ii;

    /*
     Here I add push_back something to vector and erase something from vector.
    */
}

热代码是for循环和if语句。

如果我在gcc中启用-O2-O3 (也在clang中启用),它将变得大约快10倍。我想知道这是为什么以及如何发生的。

EN

回答 2

Stack Overflow用户

发布于 2014-03-17 16:41:08

只有10次?真扫兴。我期望的最大的优化是删除operator[]上的范围检查,这反过来使它可以内联。此外,end调用也可以是内联的(begin只调用一次,所以它并不重要)。

顺便说一句,给std::max_element打电话就行了。

票数 1
EN

Stack Overflow用户

发布于 2014-03-17 16:24:42

模板会生成大量代码。大部分代码都可以安全地删除,但这是一个代价高昂的过程,只有在更高的优化级别上才能执行。

实际执行的优化取决于编译器和调用标志,但在您的情况下,函数内联和死代码消除会产生非常显著的差异。

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

https://stackoverflow.com/questions/22448135

复制
相关文章

相似问题

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