使用以下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编译。