Бесполезное выделенное Stackspace?
Почему эта функция выделяет больше стекового пространства, чем нужно, перед вызовом 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);
}
Почему между буфером и аргументом get есть дополнительный лишний пробел из трех слов?
Ответы
Ответ 1
В книге Computer Systems есть два предложения.
"gcc придерживается директивы программирования x86, что общее пространство стека, используемое функцией, должно быть кратно 16 байтам". и "Включая 4 байта для сохраненного% ebp и 4 байта для обратного адреса",