这是我的代码:
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倍。
我想知道为什么以及如何发生这种情况。
答案 0 :(得分:1)
只有10次?游民。我期望的最大优化是删除operator[]
上的范围检查,这反过来使其成为可内联的。此外,end
调用也可以内联(begin
调用一次,因此无需关注)。
BTW,只需致电std::max_element
。
答案 1 :(得分:0)
模板生成很多代码。大多数代码都可以安全地删除,但是只有在更高的优化级别才能执行昂贵的过程。
执行的实际优化取决于编译器和调用标志,但它是函数内联和死代码消除,在您的情况下产生非常显着的差异。