Используя следующий код 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.