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