Почему указатель стека увеличивается только кратно 16?

Используя следующий код C

void func() {
  int a=1,b=2,c=3;
}

Компиляция с использованием gcc -S -O -o- myfile.c Я получаю результат

    .file   "myfile.c"
    .intel_syntax noprefix
    .text
.globl func
    .type   func, @function
func:
    push    ebp
    mov ebp, esp
    sub esp, 16
    mov DWORD PTR [ebp-4], 1
    mov DWORD PTR [ebp-8], 2
    mov DWORD PTR [ebp-12], 3
    mov DWORD PTR [ebp-16], 4
    mov DWORD PTR [ebp-20], 5
    leave
    ret
    .size   func, .-func
    .ident  "GCC: (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5"
    .section    .note.GNU-stack,"",@progbits

Здесь я ожидал бы третий строка после func: должна быть sub esp, 12 вместо sub esp, 16 . Я поиграл с разным количеством автоматических переменных в функции и обнаружил, что оно увеличивается с шагом 16 байт. Почему это происходит? Это происходит на всех платформах или зависит от конкретной платформы?

В настоящее время я использую Intel Mac с OS X, компилируя через гостевую систему VirtualBox Ubuntu (32-разрядная версия) с использованием GCC.

5
задан Martin Doms 31 March 2011 в 06:29
поделиться