こんにちは Linux マシン (64 ビット) で gcc を使用してコンパイルされた以下のコード スニペットと、対応するメモリ マップを検討してください。
#include <stdio.h>
int global = 2;
int main(void)
{
int local = 0;
return 0;
}
text data bss dec hex filename
1092 500 16 1608 648 mem
ここには 2 に初期化されたグローバル変数があるためです。データセグメントに格納されている 以下のように const にする場合を考える
#include <stdio.h>
int const global = 2;
int main(void)
{
int local = 0;
return 0;
}
text data bss dec hex filename
1096 496 16 1608 648 mem
ここでは、グローバル変数がデータ セグメントからテキスト セグメントに移動されます。
データからテキスト セグメントに移動したのはなぜですか?
データセグメントはリードエリアとリードライトエリアに分かれているので、データのリードエリアに格納されているはずですよね?
コードの途中で初期化された初期化されていないグローバル変数はどうなりますか?