【发布时间】:2011-07-26 15:30:37
【问题描述】:
使用以下 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 来宾进行编译。
【问题讨论】: