2011-04-09 128 views
0

嗨 我感兴趣的是什么是汇编代码的gcc从这个代码生成(这只是虚拟的代码来说明我的观点):GCC寄存器优化

int a = 0; 
int foo(void) 
{ 
    int result = a; 
    a += 2; 
    return result; 
} 

我惊讶于该GCC拷贝的变量来堆栈然后从堆栈到寄存器,以便它可以返回它。当我在寄存器中添加结果声明时,它优化了代码而不是使用堆栈,而是直接将变量复制到寄存器中。我知道这并没有什么区别,但我想知道gcc是否没有任何好理由暗中做出这样的优化。我希望我明确表示我在说什么...

任何想法?

+5

您应该提供编译器版本,命令行和汇编输出。 – 2011-04-09 14:38:47

+0

帕斯卡尔的评论+1。在谈论诸如编译器优化之类的细节时,尽可能给这里的人们尽可能多的上下文。 (也就是说,这听起来像你没有使用最积极的优化。) – 2011-04-09 14:41:08

+0

这里最重要的部分可能是你编译这个代码是否启用优化 – nos 2011-04-09 14:45:48

回答

7

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

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

+0

我测试过,我认为你是对的。谢谢:) – martinkunev 2011-04-09 14:45:32

+0

又是一个PEBCAK – hirschhornsalz 2011-04-10 08:49:05