section pragma

OBJ ファイルにセクションを作成します。

構文

#pragma section( "section-name" [ ,attributes ] )

解説

この記事では、セグメントセクションという用語の意味は同じです。

セクションを定義すると、そのセクションは残りのコンパイルで有効になります。 ただし、__declspec(allocate) を使用する必要があります。または、セクションに何も配置しません。

section-name は、セクションの名前となる必須パラメーターです。 標準セクション名と競合する名前は付けられません。 「/SECTION」で、セクションを作成するときに使用しない名前のリストをご覧ください。

attributes は省略可能なパラメーターで、セクションに割り当てる 1 つ以上のコンマで区切った属性で構成されます。 使用可能な attributes を下に示します。

属性 説明
read データの読み取り操作を有効にします。
write データの書き込み操作を有効にします。
execute コードを実行できるようにします。
shared イメージを読み込んだすべてのプロセス間でセクションを共有します。
nopage セクションをページング不可としてマークします。 Win32 デバイス ドライバーに役立ちます。
nocache セクションをキャッシュ不可としてマークします。 Win32 デバイス ドライバーに役立ちます。
discard セクションを破棄可能としてマークします。 Win32 デバイス ドライバーに役立ちます。
remove セクションをメモリ常駐でないとマークします。 仮想デバイス ドライバー (VxD) の場合に限ります。

属性を指定しない場合、セクションには readwrite の属性があります。

この例では、最初のセクション pragma はセクションとその属性を識別します。 整数 jmysec に格納されない理由は、__declspec(allocate) を使用して宣言されていないからです。 代わりに、j がデータ セクションに入る必要があります。 整数 imysec に入るのは、その __declspec(allocate) ストレージ クラス属性が理由です。

// pragma_section.cpp
#pragma section("mysec",read,write)
int j = 0;

__declspec(allocate("mysec"))
int i = 0;

int main(){}

関連項目

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