Fortran 90/95 配列引数には,2 つの一般的な形式があります。
これらの配列は次元数と範囲が固定されており,コンパイル時にわかっています。形状無指定でないその他の仮引数 (受取側) 配列 (大きさ引継ぎ配列など) は,下記の議論では,形状明示配列引数と一緒に論じられます。
配列ポインタと割付け配列があります。形状引継ぎ配列引数は,一般に形状無指定配列引数の渡し方と同じ規則に従います。
配列を引数として渡すときには,配列の開始 (ベース) アドレスか,配列記述子のアドレスを渡します。
配列を受け取るのに形状明示配列 (または大きさ引継ぎ配列) を使用するときには,配列の開始アドレスを渡します。
配列を受け取るのに形状無指定配列または形状引継ぎ配列を使用するときには,配列記述子のアドレスを渡します。配列記述子はコンパイラが作成します。
形状引継ぎ配列または配列ポインタを形状明示配列に渡すと,コンパイラが配列全体用に一時的な配列を作成しなければならないため,実行時性能が低下します。一時的な配列が作成されるのは,渡される配列が連続していない可能性があり,受け取り側の (形状明示) 配列が連続した配列を必要とするからです。一時的な配列が作成されるときには,渡される配列の大きさによって,実行時性能に対する影響が大きいかどうかが決まります。
次表に,各種の配列形式の組み合わせで行われる処理を要約して示します。実行時性能がどの程度非効率的かは,配列の大きさに依存します。
出力引数配列の形式 | ||
入力引数配列の形式 | 形状明示配列 | 形状無指定と形状引継ぎ配列 |
形状明示配列 | きわめて効率的。一時的な配列を使用しません。配列記述子を渡しません。インタフェース宣言は省略可能です。 | 効率的。形状引継ぎ配列でのみ可能 (形状無指定配列では不可能)。一時的な配列を使用しません。配列記述子を渡します。インタフェース宣言は必須です。 |
形状無指定と形状引継ぎ配列 | 割付け配列を渡す場合,きわめて効率的です。一時的な配列を使用しません。配列記述子を渡しません。インタフェース宣言は省略可能です。
割付け配列を渡さない場合,非効率的です。可能な限り,割付け配列を使用するようにしてください。一時的な配列を使用します。配列記述子を渡しません。インタフェース宣言は省略可能です。 |
効率的。仮引数として形状引継ぎまたは配列ポインタが必要です。一時的な配列を使用しません。配列記述子を渡します。インタフェース宣言は必須です。 |