.rdata
セクションとセクションの意味を理解しようとしてい.text
ます。以下のような簡単なプログラムを試しています
int main()
{
const int a = 10;
printf("%d\n", a);
return 0;
}
map
ファイルをビルドしてダンプし、 をgcc -o a.out sample.c -Wl,Map,test.map
検索するとsample.o
、次の割り当てが見つかります
.text 0x0040138c 0x34 sample.o
.data 0x00402000 0x0 sample.o
.rdata 0x00403064 0x8 sample.o
.eh_frame 0x00404060 0x38 sample.o
.bss 0x00405020 0x0 sample.o
ここで、プログラムを少し変更してa
、グローバル変数を
const int a = 10;
int main()
{
printf("%d\n", a);
return 0;
}
上記と同じ手順を繰り返すと、割り当てが次のようになっていることがわかります
.text 0x0040138c 0x2c sample.o
.data 0x00402000 0x0 sample.o
.rdata 0x00403064 0xc sample.o
.eh_frame 0x00404060 0x38 sample.o
.bss 0x00405020 0x0 sample.o
セクションにa
割り当てられていることを明確に示しています.rdata
.rdata 0x00403064 0xc sample.o
0x00403064 a
これらの実験から、セクションのサイズが小さくなっているのに対し、セクションにglobal
const
割り当てられていることがわかります。したがって、最初の例でセクションに割り当てられたと思います。.rdata
.text
a
.text
私の質問は次のとおりです。
const
または内の場所を決定する際に、変数のスコープは考慮されます.rdata
か.text
?私の実験から、変数が
.text
セクションに割り当てられた場合、セクション内の 4 バイトと比較して、変数に 8 バイトが必要であることがわかりました.rdata
。この違いの理由は何ですか?const
ローカル変数が多すぎると、対応する.text
セクションのサイズが大幅に増加します。このシナリオで推奨されるプログラミング方法は何ですか?
よろしくお願いします。