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 にはないのはなぜですか?