int square() {
char test[50];
}
上面的代码产生
square():
push rbp
mov rbp, rsp
当我将代码更改为
int square() {
char test[150];
}
生成的程序集是
square():
push rbp
mov rbp, rsp
sub rsp, 40
这仍然很奇怪,因为我不明白为什么它不分配给以前的创作。我在 -O0 运行,所以 gcc 不会优化它。为什么 gcc 为错误大小的数组创建代码?
int square() {
char a[50];
char b[50];
}
square():
push rbp
mov rbp, rsp
sub rsp, 8
对于 x86 也是如此
int square() {
char a[500];
}
用 -m32 编译给了我:
square():
push ebp
mov ebp, esp
sub esp, 512
这额外的 12 个字节来自哪里?为什么 -m32 有 char test[50] 的子指令而 x86_64 没有?