GCC寄存器优化

mar*_*nev 0 c assembly gcc

嗨,我对gcc从这段代码生成的汇编代码感兴趣(这只是用于说明我的观点的虚拟代码):

int a = 0;
int foo(void)
{
    int result = a;
    a += 2;
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我很惊讶gcc将变量a复制到堆栈,然后从堆栈复制到寄存器,以便它可以返回它.当我将register添加到结果声明时,它优化了代码不使用堆栈,而是将变量直接复制到寄存器.我知道这并没有什么区别,但我想知道为什么gcc没有隐含地进行这样的优化.我希望我说清楚我在谈论什么......

有任何想法吗?

Eri*_* Pi 7

在编译Debug构建时(即,关闭优化),编译器倾向于制作非常简单,易于调试的代码.在这种情况下,它可能意味着将所有变量保存在内存/堆栈中,而不是寄存器中.

尝试使用完全优化(-O3)进行编译,看看是否有所作为.