以下の関数をコンパイルすると: gcc -S teste.c
void readInput() {
int buf;
}
teste.S は次のようになります。
readInput:
pushl %ebp
movl %esp, %ebp
subl $16, %esp
leave
ret
私の疑問は次のとおりです。なぜ %esp が 16 バイトから差し引かれるのか、int の場合は 4 バイトではないのでしょうか? それはアライメントと関係がありますか?
これをコンパイルすると、同様のことが起こります。
void readInput() {
char buf;
}
出力は上記と同じです。