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