-zalign

z/OS がマッピングおよび整列ルールを集約します。

-zalign は、構造体メンバーのマッピングに影響します。z/OS の構造体マッピング ルールは、構造体メンバーの整列要件に関してコンパイラ挿入のパッド バイトを最小限に抑えるために「シフトして整列」アルゴリズムを使用します。これは、「構造体」のトピックに記載されている、言語間の互換性を実現するために他の UNIX および Windows のコンパイラと互換性のある、Open PL/I のデフォルトの構造体マッピング ルールとは異なります。

重要: -zalign オプションは、z/OS の構造体マッピング ルールを一致させるために構造体マッピングが必要な場合にのみ推奨されます。このような場合の例としては、メインフレームからインポートされた、整列目的の z/OS コンパイラ挿入 (場合によっては削除) のパッド バイトを持つレコード構造体を含むファイルの読み込みが挙げられます。

依存関係

-zalign を使用すると、次の項目が暗黙指定されます。

  • -zfloat:デフォルトの浮動バイナリ単精度を 21 に、デフォルトの浮動バイナリ倍精度を 53 に設定します。Open PL/I のデフォルトは、それぞれ 23 および 52 です。
  • -zchar:CHAR、CHAR VAR、GRAPHIC、GRAPHIC VAR、WIDECHAR、WIDECHAR VAR、および PICTURE データ型のデフォルトの整列属性は unaligned であることを指定します。Open PL/I のデフォルトは aligned です。

  • -zalign Intel 32 ビット システムでの AREA および倍精度浮動バイナリのダブルワードを意味します (Open PL/I および Intel のネイティブ デフォルト整列は、Intel 32 ビット システムでのワードです)。
  • -zalign を 1 つのモジュールのコンパイルに使用する場合は、互換性のために当該プログラム内のモジュールをすべてコンパイルすることが推奨されます。同じプログラム内のコンパイル単位で -zalign の有無を混在させても問題ない可能性はありますが、-zalign でコンパイルされたモジュールが「自己完結型」でない場合、問題が発生することがあります。
  • 調整可能な構造体 (REFER エクステントまたは非定数サイズのメンバーを保持) の場合、-zalign の「シフトして整列」アルゴリズムによって、非定数オフセットを持つ構造体メンバー (「Location」フィールドの -map リストで (-V-) と表示) にアクセスするためのコードが多く生成される原因となります。構造体のレイアウトによっては、生成されるコードの量が、Open PL/I のデフォルト マッピング ルールを使用して生成されるコード (-zalign を使用しない場合) に比べて大きくなる可能性があります。これを軽減するには、コンパイラの最適化を最小限のレベル -opt 2 に設定することをお勧めします。
制約事項: 複数の REFER エクステントを持つ構造体では、コンパイラのリソースが悪影響を受けて、コンパイラが中止になる可能性があります。このような場合は、Micro Focus カスタマー ケアまでお問い合わせください。

構造体レイアウトの例 (Open PL/I のデフォルト)

以下に、サイズが 8 バイトの構造体 ST を示します。メンバー「C」はオフセット 0 (バイト整列) で、メンバー「X」はオフセット 4 (ワード整列) です。メンバー間にはコンパイラ挿入のパッド バイトが 3 バイトあります。

       1
       2      dcl 1 ST,
       3            2  C CHAR,
       4            2  X FIXED BIN(31);
       5

NAME             CLASS      SIZE      LOCATION    ATTRIBUTES

ST               BASED      8                    LEVEL 1 STRUCTURE
C               MEMBER      1         00000000   LEVEL 2 CHAR(1)
                            3         00000001    -pad-
X               MEMBER      4         00000004   LEVEL 2 FIXED BIN(31,0)

構造体レイアウトの例 (-zalign)

以下に、サイズが 5 バイトの構造体 ST を示します (メモリ内で 8 バイトが割り当てられています)。メンバー「C」はオフセット 0 (バイト整列) で、メンバー「X」はオフセット 1 (ワード整列) です。この例では、要求された境界にメンバーを適切に整列させ、コンパイラ挿入のバイトを最小化する (この場合はなくす) ために、各メンバーが 3 バイトだけシフトされています (次に示すように、OFFSET=3)。実際に「シフトして整列」アルゴリズムは、構造体の先頭に向かってメンバー間の自然な整列のギャップを埋めるパッド バイトを伝播します。構造体の外側にシフトされたパッド バイト (つまり最初のメンバーよりも先行する) は、「ハング バイト」と呼ばれます。

       1
       2      dcl 1 ST,
       3            2  C CHAR,
       4            2  X FIXED BIN(31);
       5

NAME             CLASS      SIZE      LOCATION    ATTRIBUTES

ST               BASED      5                     LEVEL 1 STRUCTURE OFFSET=3
C               MEMBER      1         00000000    LEVEL 2 CHAR(1) UNALIGNED
X               MEMBER      4         00000001    LEVEL 2 FIXED BIN(31,0)