【发布时间】:2015-07-24 01:06:54
【问题描述】:
我的问题是开放式的,答案可能过于复杂,我无法理解,但如果您有一些高水平的 cmets,我将不胜感激!
我写了一个简单的绝对值函数
int absval(int val)
{
return (val<0) ? -val: val;
}
然后用 gcc 的 -O 标志和 -S 选项编译它。 gcc 生成如下汇编代码
movl %edi, %edx
sarl $31, %edx
movl %edx, %eax
xorl %edi, %eax
subl %edx, %eax
ret
我了解汇编代码如何找到数字的绝对值,但我很困惑的是编译器是如何得出这个代码的。具体来说,它消除了任何控制流。旧版本的 gcc 会生成相同的代码吗?
【问题讨论】:
-
你为什么不直接编译它on an older compiler?!
-
@KerrekSB 谢谢,这是一个很酷的资源。
-
现代编译器比你聪明 :) 它们不仅能识别你的代码做什么,还能识别它真正应该做什么。阅读生成的程序集是了解有时应该做什么的好方法:)
标签: c gcc optimization