对于这个简单的 C 程序,
int test(int a,int b)
{
int k=89;
return a+b;
}
int main()
{
test(5,3);
}
gcc 10 生成以下汇编代码(使用https://godbolt.org/并在我的机器上验证):
test:
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-20], edi
mov DWORD PTR [rbp-24], esi
mov DWORD PTR [rbp-4], 89
mov edx, DWORD PTR [rbp-20]
mov eax, DWORD PTR [rbp-24]
add eax, edx
pop rbp
ret
main:
push rbp
mov rbp, rsp
mov esi, 3
mov edi, 5
call test
mov eax, 0
pop rbp
ret
如您所见,gcc 正在使用堆栈区域而不递减堆栈指针。这是正常的吗?gcc 不应该在使用堆栈区域之前减少 esp 吗?