注意这段代码:
#include <stdio.h>
void a(int a, int b, int c)
{
char buffer1[5];
char buffer2[10];
}
int main()
{
a(1,2,3);
}
之后 :
gcc -S a.c
该命令在汇编中显示我们的源代码。
现在我们可以看到在 main 函数中,我们从不使用“push”命令将 a 函数的参数压入堆栈。它使用“movel”而不是那个
main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $16, %esp
movl $3, 8(%esp)
movl $2, 4(%esp)
movl $1, (%esp)
call a
leave
为什么会这样?他们之间有什么区别?