无用的分配Stackspace?

时间:2013-01-11 13:48:41

标签: c assembly x86 stack

为什么在调用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);
}

为什么缓冲区和参数之间还有三个单词的额外空格?

stack http://s8.postimage.org/h2niz1kut/stack.png

1 个答案:

答案 0 :(得分:11)

计算机系统一书中有两句话。 “gcc遵循x86编程指南,该函数使用的总堆栈空间应为16字节的倍数。”和“包括保存的%ebp的4个字节和返回地址的4个字节”,