编译器优化参考

Bry*_*man 2 c++

我经常使用引用来简化代码的外观:

vec3f& vertex = _vertices[index];

// Calculate the vertex position
vertex[0] = startx + col * colWidth;
vertex[1] = starty + row * rowWidth;
vertex[2] = 0.0f;
Run Code Online (Sandbox Code Playgroud)

编译器会识别并优化它,因此它基本上如下吗?

_vertices[index][0] = startx + col * colWidth;
_vertices[index][1] = starty + row * rowWidth;
_vertices[index][2] = 0.0f;
Run Code Online (Sandbox Code Playgroud)

sme*_*ood 8

是.这是任何现代(甚至是古老)编译器都将进行的基本优化.

事实上,我认为你编写一个优化是不正确的,因为将它转换为汇编的直接转换方式涉及到_vertex地址的存储,加上索引,再加上{0,1,2} (当然,乘以适当的尺寸).

总的来说,现代编译器是惊人的.几乎所有你能想到的优化都将得到实施.除非您知道某种方式对代码具有显着的性能优势,否则您应始终以强调可读性的方式编写代码.

举个简单的例子,代码如下:

int func() {
    int x;
    int y;
    int z;
    int a;

    x = 5*5;
    y = x;
    z = y;
    a = 100 * 100 * 100* 100;

    return z;
}
Run Code Online (Sandbox Code Playgroud)

将优化到这个:

int func() {
    return 25
}
Run Code Online (Sandbox Code Playgroud)

此外,编译器还将内联函数,以便不实际调用.相反,出现'func()'的地方只会被'25'取代.

这只是一个简单的例子.现代编译器实现了许多更复杂的优化.

  • +1表示"您应该始终以强调可读性的方式编写代码".不要尝试像这样的微优化,除非你有*profiled*你的代码和*测量*你现在有问题**.话虽如此,OP在下面的表达式中使用引用去掉一个索引可能被认为是"可读性优化"本身,所以我很满意.;-) (5认同)