ALIGN

レベル 01 または レベル 77 のデータ項目を割り当てるメモリ境界を指定します。

構文:

>>-.---.--ALIGN--"integer-.-------.-"-----------------><
   +-/-+                  +-FIXED-+
                          +--OPT--+

パラメーター:

integer 1 つ目のレベル 01 項目の開始位置から、次の項目の開始位置までの距離は、この値の倍数になります。1 から 255 までの任意の値を指定できます。
OPT | FIXED
OPT を指定すると、01 レベルの項目がそのサイズに最適な integer の倍数に割り当てられます (下の表を参照)。これにより、そのようなデータ項目に対してマシン コード レベルでより最適な命令を使用できるようになります。
注: マネージ COBOL コードの場合、OPT は FIXED が設定されている場合と同様に動作します。

FIXED を指定すると、01 レベルの項目が integer の次の倍数に割り当てられます。

プロパティ:

デフォルト: ALIGN"8 OPT"
段階: 構文チェック
$SET: 初期

依存性:

IBMCOMP または NORM により ALIGN"8 OPT" が設定されます。

DIALECT"RM" により ALIGN"4 FIXED" が設定されます。

RM"ANSI" または RM により ALIGN"2 FIXED" が設定されます。

説明:

指定された値の倍数にあたるバイト境界に合わせて、レベル 01 のデータ項目が割り当てられます。

これにより、効率の良い実行結果が得られますが、使用されるメモリは増加します。

次の表に、項目のサイズおよび指令の設定に応じて項目が割り当てられる境界を示します。

レベル 01 項目のサイズ ALIGN"1 OPT" ALIGN"2 OPT" ALIGN"4 OPT" ALIGN"8 OPT" ALIGN"16 OPT"
1 1 2 4 8 16
2-3 2 2 4 8 16
4-7 4 4 4 8 16
8-15 8 8 8 8 16
>=16 16 16 16 16 16

integer を 4 の倍数以外に設定すると、生成されるコードの効率が悪くなる可能性があります。ALIGN(integer OPT) では、integer は 2 の累乗にする必要があり、それ以外の場合は次の 2 の累乗に増加します (最大値 16 まで増加)。

プログラムがレベル 01 項目のサイズを超えて次または前のレベル 01 グループに入るデータにアクセスする場合は、ALIGN(integer FIXED) を使用してレベル 01 項目間の固定割り当てを維持する必要があります。ただし、このようなコードは ANSI 標準に準拠しておらず、すべての状況で動作することが保証されません。また、最適化を妨げる可能性があり、マネージ COBOL では機能しません。

制限事項:

レベル 01 グループに次のレベル 78 構文が含まれている場合、レベル 01 項目は、そのサイズではなく ALIGN 指令の値にのみ従って割り当てられます。

01 grp1.
78 constant-01 value next.
78 constant-01 value start grp1.

これは、項目がそのサイズに従って割り当てられる前に next/start によってデータ アドレスが記録されるためです。