data_seg pragma

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

構文

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

パラメーター

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

pop
(省略可能) 内部コンパイラ スタックの最上部からレコードを削除します。 pop には、identifiersection-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_segpragma は、変換単位からすべての初期化されたデータ項目を section-name という名前のデータ セクションに入れるよう、コンパイラに指示します。 既定では、オブジェクト ファイル内の初期化されたデータに使用されるデータ セクションの名前は .data です。 初期化されていない変数は、ゼロに初期化されたものと見なされ、.bss に格納されます。 section-name パラメーターのない data_segpragma ディレクティブは、後続の初期化されたデータ項目のデータ セクション名を .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() {
}

関連項目

Pragma ディレクティブと __pragma キーワードと _Pragma キーワード