为什么在调用gets()
之前,此函数会分配多于所需的堆栈空间?
echo:
pushl %ebp
movl %esp, %ebp
pushl %ebx
leal -8(%ebp), %ebx
subl $20, %esp <-- Why so much space?
movl %ebx, (%esp)
call gets
...
相应的C代码:
void echo()
{
char buf[4];
gets(buf);
puts(buf);
}
为什么缓冲区和参数之间还有三个单词的额外空格?
答案 0 :(得分:11)
计算机系统一书中有两句话。 “gcc遵循x86编程指南,该函数使用的总堆栈空间应为16字节的倍数。”和“包括保存的%ebp的4个字节和返回地址的4个字节”,