重複の可能性:
スタック上のローカル変数割り当ての順序
(x86_64 Linux の C プログラム) 変数がスタック メモリに割り当てられる方法を理解しようとしています。私が理解しているように、スタックフレーム内の変数はメモリアドレスの下位に向かって移動します。以下のプログラムはこれを示しています。
int main() {
int i = 6;
char buffer[8];
return 0;
}
プログラムは次のようにコンパイルされました: gcc -g prog.c
デバッグショー:
(gdb) x/x &i
0x7fffffffe04c: 0x00000006
(gdb) x/x buffer
0x7fffffffe040: (random data)
文字配列には、整数 i 変数よりも低いメモリ アドレスがあります。私の質問は、以下に示すように宣言の順序が逆になったときに、整数変数 i がまだ文字配列より大きいメモリ アドレスにあるのはなぜですか?
int main() {
char buffer[8];
int i = 6;
return 0;
}
(gdb) x/x &i
0x7fffffffe04c: 0x00000006
(gdb) x/x buffer
0x7fffffffe040: (random data)
この問題は、厳密に単一の整数変数の順序付けでは発生しないようです。整数宣言の順序が入れ替わると、最初に宣言されたものの方がスタック フレーム内のメモリ アドレスが高くなります。ここで問題になるのは、文字配列でこれが発生する理由です。この回答を別の投稿で読みましたが、誰かがこれについて決定的な説明を持っているかどうか疑問に思っています.