使用以下C代码
void func() {
int a=1,b=2,c=3;
}
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)
在这里我希望之后的第三行func:
是sub esp,12
不是sub esp,16
.我在函数中使用了不同数量的自动变量,发现它以16字节为增量增长.为什么会这样?这是在所有平台上发生,还是特定于平台?
我目前正在使用OSX运行Intel Mac,使用GCC通过Ubuntu(32位)VirtualBox来编译.