共通ブロックの割り当て

-dyncom (Linux* および Mac OS* X) オプション、または /Qdyncom (Windows*) オプションを使用して、ランタイム時に COMMON ブロックを動的に割り当てます。

このオプションは、共通ブロックを動的にするために指定します。データ領域はコンパイル時ではなくランタイム時に割り当てられます。ダイナミック共通ブロックの宣言を含む各ルーチンへの入口で、共通ブロックの領域が割り当てられているかどうかがチェックされます。ダイナミック共通ブロックがまだ割り当てられていない場合は、チェック時に領域が割り当てられます。

次のコマンドラインは、ランタイム時に動的に割り当てられる共通ブロックの名前と、ダイナミック共用オプションを指定します。

ifort -dyncom "blk1,blk2,blk3" test.f (Linux および Mac OS X)
ifort /Qdyncom"BLK1,BLK2,BLK3" test.f (Windows)

BLK1BLK2、および BLK3 は、動的にする COMMON ブロックの名前です。

dyncom/Qdyncom オプションの使用ガイドライン

次に、-dyncom (Linux および Mac OS X) オプションまたは /Qdyncom (Windows) オプションを使用する場合に注意する必要のあるいくつかの制限を示します。

詳細は、次のトピックを参照してください。

ダイナミック共通ブロックを使用する理由

ダイナミック共通ブロックを使用する主な理由は、独自の割り当てルーチンによって共通ブロックの割り当てが制御できるからです。独自の割り当てルーチンを使用するには、そのルーチンを Fortran ランタイム・ライブラリーの前にリンクする必要があります。このルーチンは、正しいルーチン名を生成するために、C 言語で記述する必要があります。

このルーチンのプロトタイプは、次のとおりです。

void _FTN_ALLOC(void **mem, int *size, char *name);

各アイテムの意味は次のとおりです。

Note icon

割り当てる領域のサイズ (バイト数) を返す必要があります。_FTN_ALLOC() を呼び出すライブラリー・ルーチンにより、この共通ブロックを使用するほかのすべてのルーチンに対して、十分な領域が割り当てられます。size パラメーターの変更によって、割り当てる領域のサイズ (バイト数) を返します。

ダイナミック共通ブロックへのメモリーの割り当て

ランタイム・ライブラリー・ルーチン f90_dyncom は、メモリー割り当てを実行します。コンパイラーは、ダイナミック共通ブロックを含むプログラム内の各ルーチンの開始時に、このルーチンを呼び出します。次に、このライブラリー・ルーチンが _FTN_ALLOC() を呼び出して、メモリーを割り当てます。デフォルトでは、コンパイラーが、各ルーチンで宣言されたとおりの共通ブロックのサイズ (バイト数) を f90_dyncom に渡し、次にそのサイズが _FTN_ALLOC() に渡ります。別のルーチンにおいて異なるサイズで宣言された同じ名前の共通ブロックを持つ非標準の拡張を使用する場合、その共通ブロックの宣言を含むルーチンが呼び出される順序によっては、ランタイムエラーが発生する可能性があります。

Fortarn ランタイム・ライブラリーには、単に要求されたバイト数を割り当てて返す _FTN_ALLOC() のデフォルトのバージョンが含まれます。