13

为什么这个函数在调用之前分配了比它需要的更多的堆栈空间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);
}

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

堆

4

1 回答 1

11

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

于 2013-01-11T13:59:49.550 回答