Используя следующий код 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 с OSX, компилирую его с помощью гостевой системы Ubuntu (32-разрядная версия) VirtualBox с помощью GCC.