为什么此函数在调用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的参数之间有一个额外的三个字的额外空间?
发布于 2013-01-11 13:59:50
“计算机系统”一书中有两个句子。"gcc遵循x86编程准则,即函数使用的总堆栈空间应为16字节的倍数。“包括用于保存%ebp的4个字节和用于返回地址的4个字节,
https://stackoverflow.com/questions/14279507
复制相似问题