質問: ### 前提・実現したいこと 変数宣言の順番によって、変数がメモリアドレスに格納される順番が変わることを確認するために、 int型変数のiと、char型変数のcを、それぞれ順番を変えて宣言したのですが、 メモリアドレスに格納される順番が変わっていませんでした。 理由を教えて頂きたいです。 ### 発生している問題・エラーメッセージ 変数cを先に宣言した場合 ``` ronin@ronin-ThinkPad-X280:~/Program$ gcc sample.c ronin@ronin-ThinkPad-X280:~/Program$ ./a.out 変数iのアドレス 0x7ffe1c7df634 変数cのアドレス 0x7ffe1c7df633 ``` 変数iを先に宣言した場合 ``` ronin@ronin-ThinkPad-X280:~/Program$ gcc sample.c ronin@ronin-ThinkPad-X280:~/Program$ ./a.out 変数iのアドレス 0x7ffc0d5a2ee4 変数cのアドレス 0x7ffc0d5a2ee3 ``` ### 該当のソースコード 変数cを先に宣言 ``` #include int main(){ char c; int i; printf("変数iのアドレス %p\n", &i); printf("変数cのアドレス %p\n", &c); } ``` 変数iを先に宣言 ``` #include int main(){ int i; char c; printf("変数iのアドレス %p\n", &i); printf("変数cのアドレス %p\n", &c); } ```
回答: 宣言順とアドレスに関係はありません。どのように配置されるかはコンパイラに任されます。4 バイトのメモリが後に(スタックなので後ろから数える)確保されているのは、パフォーマンス上の理由による最適化の結果だと思います。詳しくは次を参照してください。 データ構造アライメント - Wikipedia