-align recnbyte (または -Zp[n]) オプションを使用して、n バイト境界 (-Zp[n] では n = 1、2、4、8、16 のいずれか) へのアライメント条件を指定します。
このオプションを指定すると、構造体の 2 番目以降の各メンバが、メンバの型のサイズまたは n バイト境界 (n = 1、2、4、8、16 のいずれか) のどちらか小さい方で格納されます。
例えば、prog1.f ファイルのすべての構造体と共用体に対するパック境界またはアライメント条件として、2 バイトを指定するには、次のコマンドを使用します。
ifort -Zp2 prog1.f
IA-32 および Itanium® ベース・システムのデフォルトは、-align rec8byte または -Zp8 です。-Zp16 オプションを使用して、共通ブロックなどの Fortran 構造体をアライメントすることができます。Fortran 構造体については、『Intel® Fortran Language Reference』(英語) の STRUCTURE 文を参照してください。
n を省略して -Zp を指定すると、構造体は 8 バイト境界にパックされます。
-align オプションは、共通ブロック内の変数アライメントを変更するフロントエンドのオプションです。
例:
common /block1/ch,doub,ch1,int
integer int
character(len=1) ch, ch1
double precision doub
end
-align オプションは、doub および int の自然境界上へのアライメントを保証するための、パディングの挿入を有効にします。-noalign オプションは、パディングを無効にします。
-align オプションは主に構造体に適用され、 変数と配列のメモリ・レイアウトを分析し、再整理します。基本的には -Zp{n} と同じ動作をします。-noalign でいずれのオプションも無効にできます。
-align keyword オプションについては、『インテル® Fortran コンパイラ・ユーザーズ・ガイド Vol I』を参照してください。
-pad オプションは、構造体と派生型に適用されたときには、事実上、-align と同じです。ただし、-pad の範囲はより広く、共通ブロック、派生型、 シーケンス形式、VAX* 構造体にも適用できます。
次のオプションを使用して、インテル Fortran コンパイラが、共通ブロック、派生型データ、およびインテル Fortran レコード構造体に含まれる複数のデータ項目の自然なアライメントを行うために、必要に応じてパディングを追加するかどうかを制御します。
デフォルト (-O2) では -align commons オプションは、必要であればパディング・バイトを追加して共通ブロックのデータを最大 4 バイト境界上にアライメントするよう指定します。
-align nocommons は、共通ブロックデータのバイトを任意にアライメントします。この場合、COMMON 文中のデータ項目が、サイズの大きな数値データ項目から順番に指定され、最後に文字データが指定されているわけではない限り、アライメントの合っていないデータが生じる可能性があります。
デフォルト (-O2) では -align dcommons オプションは、必要であればパディング・バイトを追加して共通ブロックのデータを最大 8 バイト境界上にアライメントするよう指定します。
-align nodcommons は、共通データに含まれるデータ項目のバイトを任意にアライメントします。
-align dcommons オプションは、共通ブロックを使用するアプリケーションに対して指定します。ただし、アプリケーションにアライメントの合っていないデータが全くない場合や、アライメントの合っていないデータがあってもすべてのデータ項目が 4 バイト以下である場合を除きます。すべてのデータ項目が 4 バイト以下であり、共通ブロックを使用するアプリケーションには、-align dcommons ではなく、-align commons を指定できます。
-align norecords オプションは、派生型データおよびレコード構造体 (インテル Fortran 拡張機能) に含まれる複数のデータ項目に対し、自然なアライメントではなく、バイト境界上への任意のアライメントを行うよう指定します。デフォルトは -align records です。
-align records オプションは、レコード構造体 (拡張機能) および SEQUENCE 文のない派生型データに含まれる複数のデータ項目に対し、必要であればパディング・バイトを追加して自然なアライメントを行うよう指定します。
-align recnbyte オプションは、レコードのフィールドおよび派生型のコンポーネントに対し、指定のサイズバイト境界または自然なアライメントを行う境界のどちらか小さい方のアライメントを行うよう指定します。このオプションは、共通ブロックが自然にアライメントされるか、あるいはパックされるかどうかには影響を与えません。
-align sequence オプションは、SEQUENCE 文で宣言された派生型コンポーネント (シーケンス・コンポーネント) のアライメントを制御します。
-align nosequence オプションを指定すると、シーケンス・コンポーネントは他のアライメント規則に関係なくパックされます。-align none は -align nosequence を意味します。
-align sequence オプションを指定すると、現在使用しているアライメント規則がシーケンス・コンポーネントに適用されます。したがって、-align record がデフォルト値なので、コマンドラインで -align sequence のみを指定した場合、これらの派生型のフィールドは自然にアライメントされます。
デフォルトの動作では派生型構造体やレコード構造体に含まれる複数のデータ項目は自然にアライメントされますが、共通ブロックのデータ項目はされません (-align nocommons を使用した -align records)。派生型構造体では SEQUENCE 文を使用すると、-align records はデータ項目を自然にアライメントするために必要なパディング・バイトを追加しません。