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) の場合に限ります。 |
属性を指定しない場合、セクションには read
と write
の属性があります。
例
この例では、最初のセクション pragma はセクションとその属性を識別します。 整数 j
が mysec
に格納されない理由は、__declspec(allocate)
を使用して宣言されていないからです。 代わりに、j
がデータ セクションに入る必要があります。 整数 i
が mysec
に入るのは、その __declspec(allocate)
ストレージ クラス属性が理由です。
// pragma_section.cpp
#pragma section("mysec",read,write)
int j = 0;
__declspec(allocate("mysec"))
int i = 0;
int main(){}