コンパイラが出力するセクション名を切り替えます。 |
特定のデータや関数の集まりに対してデフォルトとは異なるセクション名を付けることで,それらのデータや関数の集まりをほかのデータや関数とは別のアドレスに配置したり,セクション単位で特定の処理をすることが可能となります。 |
変更セクション名に使用可能な文字は,次のとおりとします。 |
変更セクション名のみを指定する場合,その#pragma宣言以降にあるプログラム領域,定数領域,初期化データ領域,および未初期化データ領域のすべてのセクション名を変更します。この場合,各セクションの変更後のセクション名は,現在のセクション名の後に変更セクション名の文字列を追加し,更に_s/_n/_fのいずれかを付けたセクション名となります。現在のセクション名に_n/_fが付いている場合は,それを取り除きます。 |
#pragma section bss XXX int __near i; //セクション名はXXX_n #pragma section YYY int __far j; //セクション名はXXXYYY_f //bss はnear/far まとめてセクション名が変化するため, //__farでもXXXが付加される。 |
セクション種別も変更セクション名も記述しなかった場合は,その#pragma宣言以降にあるプログラム領域,定数領域,初期化データ領域,および未初期化データ領域の全てのセクション名をデフォルト・セクション名に戻します。 |
#pragma sectionを関数内に記述した場合,有効範囲は関数内に限らず記述位置以降すべてとなります。関数内でtextのセクションを変更した場合,次の関数から有効となります。switchテーブルのセクション配置は,各関数の先頭時点で指定したconstデータのセクションとなります。 |
int __near ni_1; //.bss int __far fi_1; //.bssf #pragma section bss MyBss int __near ni_2; //MyBss_n int __far fi_2; //MyBss_f #pragma section int __near ni_3; //.bss int __far fi_3; //.bssf |