Подтвердить что ты не робот

Бесполезное выделенное 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 есть дополнительный лишний пробел из трех слов?

stack

4b9b3361

Ответ 1

В книге Computer Systems есть два предложения. "gcc придерживается директивы программирования x86, что общее пространство стека, используемое функцией, должно быть кратно 16 байтам". и "Включая 4 байта для сохраненного% ebp и 4 байта для обратного адреса",