フィールドのアラインメント(Delphi)
Delphi コンパイラ指令のリスト:インデックス への移動
種類 |
スイッチ |
構文 |
{$A+}、{$A-}、{$A1}、{$A2}、{$A4}、{$A8}、{$A16} のいずれか {$ALIGN ON}、{$ALIGN OFF}、{$ALIGN 1}、{$ALIGN 2}、{$ALIGN 4}、{$ALIGN 8}、{$ALIGN 16} のいずれか |
デフォルト |
{$A8} {$ALIGN 8} |
スコープ |
ローカル |
説明
$A 指令は、フィールドのアラインメントにパディングを導入した場合にコンパイラで使用される最大アラインメントを制御します。
{$A1} または {$A-} 状態では、フィールドはアラインメントされません。 すべてのレコードおよびクラス構造体は packed になります。
{$A2} 状態では、packed 修飾子を付けずに宣言されているレコード型の内部のフィールドや、クラス構造体の内部のフィールドは、ワード境界でアラインメントされます。
{$A4} 状態では、packed 修飾子を付けずに宣言されているレコード型の内部のフィールドや、クラス構造体の内部のフィールドは、ダブルワード境界でアラインメントされます。
{$A8} または {$A+} 状態では、packed 修飾子を付けずに宣言されているレコード型の内部のフィールドや、クラス構造体の内部のフィールドは、クワッドワード境界でアラインメントされます。
{$A16} 状態では、packed 修飾子を付けずに宣言されているレコード型の内部のフィールドや、クラス構造体の内部のフィールドは、ダブル クワッドワード境界でアラインメントされます。
レコード型のフィールド アラインメントについては、Delphi 言語ガイドの』の「内部データ形式(Delphi)#レコード型」を参照してください。
$A 指令の状態にかかわらず、変数と型付き定数は常に、最適にアクセスされるようにアラインメントされます。 {$A8} 状態の方が実行は速くなります。
macOS アプリケーションの場合、スタック アラインメントは 16 バイト境界に合わせる必要があります。 詳細については、Eli Boling のブログ(http://blogs.embarcadero.com/eboling/2009/05/20/5607)を参照してください。