bss_seg pragma

初期化されていない変数が格納される、オブジェクト (.obj) ファイルのセクション (セグメント) を指定します。

構文

#pragma bss_seg( [ "section-name" [ , "section-class" ] ] )
#pragma bss_seg( { push | pop } [ ,identifier ] [ , "section-name" [ , "section-class" ] ] )

パラメーター

push
(省略可能) レコードを内部コンパイラ スタックに格納します。 push には、identifiersection-name を指定できます。

pop
(省略可能) 内部コンパイラ スタックの最上部からレコードを削除します。 pop には、identifiersection-name を指定できます。 pop コマンドを 1 つ使用するだけで、identifier を使用することにより複数のレコードをポップできます。 section-name は、ポップの後にアクティブな BSS セクション名になります。

識別子
(省略可能) push と共に使用した場合、内部コンパイラ スタックのレコードに名前を割り当てます。 このディレクティブは、pop と共に使用した場合に、identifier が削除されるまで、内部スタックからレコードをポップオフします。 identifier が内部スタックに見つからない場合は、何もポップされません。

"section-name"
(省略可能) セクションの名前。 pop と共に使用すると、スタックはポップされて section-name がアクティブな BSS セクション名になります。

"section-class"
(省略可能) 無視されますが、Microsoft C++ 2.0 より前のバージョンとの互換性を保つために残されています。

解説

オブジェクト ファイル内の section は、メモリへの読み込み単位となる名前付きのデータ ブロックです。 BSS セクションは、初期化されたデータを含むセクションです。 この記事では、セグメントセクションという用語の意味は同じです。

bss_segpragma ディレクティブは、すべての初期化されていないデータ項目を、変換単位から section-name という名前の BSS セクションに入れるよう、コンパイラに指示します。 場合によっては bss_seg を使用して、初期化されていないデータを 1 つのセクションにグループ化することで、読み込み時間を短縮できます。 既定では、オブジェクト ファイル内の初期化されていないデータに使用される BSS セクションの名前は .bss です。 section-name パラメーターのない bss_segpragma ディレクティブは、後続の初期化されていないデータ項目の BSS セクション名を .bss にリセットします。

bss_segpragma を使用して割り当てられたデータは、その位置に関する情報を保持しません。

セクションを作成する場合に使用してはならない名前のリストについては、「/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() {
}

関連項目

pragma ディレクティブと __pragma および _Pragma キーワード