code_seg pragma

関数が格納されるオブジェクト (.obj) ファイル内のテキスト セクション (セグメント) を指定します。

構文

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

パラメーター

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

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

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

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

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

解説

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

code_segpragma ディレクティブは、翻訳単位の後続のすべてのオブジェクト コードを section-name というテキスト セクションに格納するように、コンパイラに指示します。 既定では、オブジェクト ファイル内の関数に使用されるテキスト セクションには .text という名前が付けられます。 section-name パラメーターがない code_segpragma ディレクティブは、後続のオブジェクト コードのテキスト セクション名を .text にリセットします。

code_segpragma ディレクティブは、インスタンス化されたテンプレートに生成されるオブジェクト コードの配置を制御しません。 また、特殊なメンバー関数など、コンパイラによって暗黙的に生成されるコードも制御しません。 そのコードを制御するには、__declspec(code_seg(...)) 属性を代わりに使用することをお勧めします。 それにより、コンパイラによって生成されたコードを含むすべてのオブジェクト コードの配置を制御できます。

セクションを作成する場合に使用してはならない名前のリストについては、「/SECTION」を参照してください。

初期化されたデータ (data_seg)、初期化されていないデータ (bss_seg)、および const 変数 (const_seg) のセクションを指定することもできます。

DUMPBIN.EXE アプリケーションを使用してオブジェクト ファイルを表示できます。 サポートされている各ターゲット アーキテクチャの DUMPBIN のバージョンは Visual Studio に付属しています。

この例では、code_segpragma ディレクティブを使用して、オブジェクト コードの格納場所を制御する方法を示しています。

// pragma_directive_code_seg.cpp
void func1() {                  // stored in .text
}

#pragma code_seg(".my_data1")
void func2() {                  // stored in my_data1
}

#pragma code_seg(push, r1, ".my_data2")
void func3() {                  // stored in my_data2
}

#pragma code_seg(pop, r1)      // stored in my_data1
void func4() {
}

int main() {
}

関連項目

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