GCC编译(使用gcc --omit-frame-pointer -s
):
int the_answer() { return 42; }
成
.Text .globl _the_answer _the_answer: subl $12, %esp movl $42, %eax addl $12, %esp ret .subsections_via_symbols
什么是'$ 12'常数在这里做什么,'%esp'寄存器是什么?
简答:堆叠帧.
答案很长:当你调用一个函数时,编译器会操纵堆栈指针以允许本地数据,如函数变量.由于你的代码正在改变esp
,堆栈指针,我所假设的就是这里发生的.我本以为GCC足够聪明,可以在不需要的地方优化它,但你可能没有使用优化.