キャッシュを効率よく利用するためにパディングを挿入します。
配列や文字変数が、静的な局所変数で初期化されていない場合、または共通ブロックにある場合、間にパディングを挿入します。パディングは、キャッシュを効率的に利用できる位置にデータが配置されるように挿入されます。いずれの場合も、配列または文字変数を等値化することはできません。
p を指定する場合は、%none か、local または common のいずれかまたは両方を指定する必要があります。
local |
隣接する局所変数の間にパディングを追加挿入します。 |
common |
共通ブロック変数の間にパディングを追加挿入します。 |
%none |
パディングを追加挿入しません (コンパイラのデフォルト)。 |
local と common の両方を指定する場合、順序はどちらが先でもかまいません。
-pad のデフォルトは、次のとおりです。
デフォルトではコンパイラはパディングを挿入しません。
値なしの -pad は -pad=local,common と指定するのと同じです。
-pad[=p] オプションは、次の条件を満たす項目に適用されます。
配列または文字変数になっている項目
静的で局所的または共通ブロックにある項目
局所変数または静的変数については、「3.4.91 -stackvar」を参照してください。
プログラムは次の制限事項に従っている必要があります。
配列と文字列のどちらも等値化されません。
ある共通ブロックを引用するファイルのコンパイルで -pad=common を指定するときは、その共通ブロックを引用するすべてのファイルのコンパイルで -pad=common を指定する必要があります。このオプションは、共通ブロック内の変数の配置を変更します。あるプログラム単位をこのオプション付きでコンパイルし、別のプログラム単位をこのオプションなしでコンパイルすると、共通ブロック内の同じ位置への引用が、別の位置を引用してしまう可能性が生じます。
-pad=common を指定する場合、別のプログラム単位にある共通ブロックの変数宣言を、名前を除いて同じにする必要があります。共通ブロックの変数の間に挿入されるパディングの量は、このような変数の宣言内容に応じて異なります。別のプログラム単位にある変数のサイズやランクが異なる場合は、同じファイル内でも変数の位置が異なることがあります。
-pad=common が指定されている場合、共通ブロック変数を伴う EQUIVALENCE を宣言すると、警告メッセージが表示されてエラーになります。ブロックはパディングされません。
-pad=common が指定されている場合、共通ブロック内の配列のオーバーインデックスを避けてください。パディングされた共通ブロックで隣接データの位置を変更すると、予想外の形でオーバーインデックスが失敗します。
-pad が使用されたときに、共通ブロックのコンパイルの一貫性が維持されるようにする必要があります。異なるプログラムユニットの共通ブロックを -pad=common を付けてコンパイルしたとき、その一貫性が維持されない場合は、エラーになります。-Xlist を付けたコンパイルでは、同じ名前の共通ブロックの長さがプログラムユニットの間で異なる場合に、そのことが報告されます。