FILE SECTION および WORKING-STORAGE SECTION では、すべての 01 レベルの項目と 77 レベルの項目 (および一部の 66 レベルの項目) は、16 バイト境界に置かれます。
グループ構造の中では、ポインターも 16 バイトの境界になければなりません。 そのために、ILE COBOL コンパイラーはポインターの直前に FILLER 項目を追加します。 FILLER 項目を追加しないようにするには、ポインターをグループ項目の先頭に置いてください。
ポインターがテーブルの一部である場合、そのテーブルの最初の項目が 16 バイト境界に置かれます。 それ以降に出現するポインターの位置を 16 バイト境界にするため、必要に応じて FILLER 項目がテーブルの末尾に追加されます。
WORKING-STORAGE SECTION. 77 APTR USAGE POINTER. 01 AB. 05 ALPHA-NUM PIC X(10). 05 BPTR USAGE PROCEDURE-POINTER. 01 EF. 05 ARRAY-1 OCCURS 3 TIMES. 10 ALPHA-NUM-TWO PIC X(14). 10 CPTR USAGE POINTER. 10 ALPHA-NUM-THREE PIC X(5).
この例で、APTR はポインター・データ項目です。 したがって、77 レベルの項目の位置は 16 バイト境界になります。 グループ項目 AB は 01 レベルの項目であり、自動的に 16 バイト境界になります。 グループ項目 AB の中で、BPTR は 16 バイト境界にはなりません。 位置合わせを適切に行うために、コンパイラーは 6 バイトの FILLER 項目を ALPHA-NUM の後に挿入します。 最後に、最初に出現する CPTR の位置合わせのために、2 バイトの FILLER が必要です。 ALPHA-NUM-THREE の長さは 5 バイトしかないので、これ以降に出現する CPTR をすべて位置合わせするには、 別に 11 バイトの FILLER を ARRAY-1 の末尾に追加しなければなりません。
FILE SECTION でポインターが定義されていて、かつファイルのブロック化が有効でない場合、 各 01 項目は 16 バイト境界になります。 ファイルのブロック化が有効な場合は、ブロックの最初のレコードが 16 バイト境界になることしか保証されません。 したがって、ブロック化が有効なファイルには、ポインターを定義しないでください。 ブロック化については 入力レコードの非ブロック化および出力レコードのブロック化を参照してください。
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.