c++ - 在 gcc 中使用 O2 时如何将此 vector 优化快 10 倍?

标签 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 倍左右。 我想知道这是为什么以及如何发生的。

最佳答案

只有10次?无赖。我期望的最大优化是删除对 operator[] 的范围检查,这反过来又使其可以内联。此外,end 调用也可以被内联(begin 被调用一次,因此无关紧要)。

顺便说一句,只需调用 std::max_element

关于c++ - 在 gcc 中使用 O2 时如何将此 vector 优化快 10 倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22448135/

相关文章:

将 ifloats 表定义为数组的 C++ 干净方法

c++ - 循环检查约定

c++ - Prefast 中 NULL 解引用的注释和 GCC 上的编译

c++ - 在 Linux 平台上从 Node.js 连接到 DB2

c++ - STL模板的特化

c++ - 为什么我的 visual studio .obj 文件比输出的 .exe 文件大?

c++ - C++ STL vector 模板如何将其对象存储在 Visual Studio 编译器实现中?

gcc - SysTick->LOAD 与 SysTick->CALIB

c++ - 对自定义对象的 vector 进行排序

c++ - 从 boost::tokenizer 检索迭代器时 msvcp90d.dll 崩溃