为什么这个函数在调用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); } 为什么在gets函数的缓冲区和参数之间会有额外的三个单词空格?