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

时间:2014-03-17 06:25:08

标签: c++ gcc stl compiler-optimization stdvector

这是我的代码:

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(以及clang)中启用-O2-O3,它的速度将提高约10倍。 我想知道为什么以及如何发生这种情况。

2 个答案:

答案 0 :(得分:1)

只有10次?游民。我期望的最大优化是删除operator[]上的范围检查,这反过来使其成为可内联的。此外,end调用也可以内联(begin调用一次,因此无需关注)。

BTW,只需致电std::max_element

答案 1 :(得分:0)

模板生成很多代码。大多数代码都可以安全地删除,但是只有在更高的优化级别才能执行昂贵的过程。

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