C和C 中的代码优化

code optimization in C and C++

本文关键字:代码优化      更新时间:2023-10-16

以下两个代码段之间是否有任何优化?

案例1:

int func()
{
    int a = 10;
    return a;
}

第一种情况将值分配给函数中的变量,然后返回该变量。

情况2:

int func()
{
    return 10;
}

第二个功能只是直接返回值。

另外,哪个更快?

这两个功能都将与任何一半的编译器一起产生相同的机器代码。自1980年代以来,编译器能够进行优化本地临时变量。

这就是为什么使用局部变量提高复杂表达式的可读性是一个好主意的原因。在您的情况下,本地变量只是多余的。

启用了-O1(或更高(开关,两个片段都会产生相同的组件,

func():
        mov     eax, 10
        ret

因此,在性能方面,两个片段都是相同的。

任何明智的编译器都应在这两种情况下构建基本相同的代码。

对于诸如int之类的简单类型,几乎可以肯定没有任何类型的性能区别。正如其他人指出的那样,汇编程序是相同的。

对于C 中的复杂类型,答案更加细微,并且可以取决于复制elision和Move语义的使用。这是值得考虑的,尤其是在实施几乎任何类型的模板时。

(说(std::vector<>的良好实现非常小心,以不创建需要分配或移动的不必要的副本。