使用以下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字节为增量增长。为什么会这样?这会在所有平台上发生还是特定于平台?我当前正在运行带有OSX的Intel Mac,并使用GCC通过Ubuntu(32位)VirtualBox guest虚拟机进行编译。
最佳答案
从GCC man page(强调我的名字):
-mpreferred-stack-boundary=num
Attempt to keep the stack boundary aligned to a 2 raised to num byte boundary. If
-mpreferred-stack-boundary
is not specified, the default is 4 (16 bytes or 128 bits).
关于assembly - 为什么我的堆栈指针仅以16的倍数递增?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5496045/