bss_seg
pragma
初期化されていない変数が格納される、オブジェクト (.obj) ファイルのセクション (セグメント) を指定します。
構文
#pragma bss_seg(
[ "section-name" [,
"section-class" ] ])
#pragma bss_seg(
{push
|pop
} [,
identifier ] [,
"section-name" [,
"section-class" ] ])
パラメーター
push
(省略可能) レコードを内部コンパイラ スタックに格納します。 push
には、identifier と section-name を指定できます。
pop
(省略可能) 内部コンパイラ スタックの最上部からレコードを削除します。 pop
には、identifier と section-name を指定できます。 pop
コマンドを 1 つ使用するだけで、identifier を使用することにより複数のレコードをポップできます。 section-name は、ポップの後にアクティブな BSS セクション名になります。
identifier
(省略可能) push
と共に使用した場合、内部コンパイラ スタックのレコードに名前を割り当てます。 このディレクティブは、pop
と共に使用した場合に、identifier が削除されるまで、内部スタックからレコードをポップオフします。 identifier が内部スタックに見つからない場合は、何もポップされません。
"section-name"
(省略可能) セクションの名前。 pop
と共に使用すると、スタックはポップされて section-name がアクティブな BSS セクション名になります。
"section-class"
(省略可能) 無視されますが、Microsoft C++ 2.0 より前のバージョンとの互換性を保つために残されています。
解説
オブジェクト ファイル内の section は、メモリへの読み込み単位となる名前付きのデータ ブロックです。 BSS セクションは、初期化されたデータを含むセクションです。 この記事では、セグメントとセクションという用語の意味は同じです。
bss_seg
pragma ディレクティブは、すべての初期化されていないデータ項目を、変換単位から section-name という名前の BSS セクションに入れるよう、コンパイラに指示します。 場合によっては bss_seg
を使用して、初期化されていないデータを 1 つのセクションにグループ化することで、読み込み時間を短縮できます。 既定では、オブジェクト ファイル内の初期化されていないデータに使用される BSS セクションの名前は .bss
です。 section-name パラメーターのない bss_seg
pragma ディレクティブは、後続の初期化されていないデータ項目の BSS セクション名を .bss
にリセットします。
bss_seg
pragma を使用して割り当てられたデータは、その位置に関する情報を保持しません。
セクションを作成する場合に使用してはならない名前のリストについては、「/SECTION
」を参照してください。
初期化されたデータ (data_seg
)、関数 (code_seg
)、const 変数 (const_seg
) のセクションも指定できます。
DUMPBIN.EXE アプリケーションを使用してオブジェクト ファイルを表示できます。 サポートされている各ターゲット アーキテクチャの DUMPBIN のバージョンは Visual Studio に付属しています。
例
// pragma_directive_bss_seg.cpp
int i; // stored in .bss
#pragma bss_seg(".my_data1")
int j; // stored in .my_data1
#pragma bss_seg(push, stack1, ".my_data2")
int l; // stored in .my_data2
#pragma bss_seg(pop, stack1) // pop stack1 from stack
int m; // stored in .my_data1
int main() {
}