Ada 2012 LRM の「アライメント」の定義。
'アライメントが型に関連付けられている場合、その型のオブジェクトのアドレスは、アライメント値で割り切れる必要があります。
したがって、あなたの定義では、型 T のオブジェクトをアドレス 800 に明示的に配置するか、コンパイラによって自動的に割り当てることができますが、804 には配置されません。
これは、ダブル ワード (8 バイト) 境界で始まる double など、特定のデータ型がアラインメント制約に従う必要がある場合に関係します。(これは、ターゲット アーキテクチャに依存します。このような制約を課すものもあれば、課さないものもあります。) 同様に、一部のアーキテクチャでは、マルチバイト値を奇数アドレスで開始できる場合があります。
この問題は、外部で定義されたものと一致する Ada レイアウトを定義する必要がある場所を説明するような状況で発生する可能性が最も高くなります。'Alignment を指定すると、オブジェクトとレコード コンポーネントが外部ソースと一致するように適切にレイアウトされます。
多くの場合、特に C とのインターフェイスの場合、コンベンションアスペクトまたはプラグマを対応する型定義に適用するだけで、Ada レイアウトが C レイアウトと自動的に一致し、詳細なアラインメントとパディングはすべてコンパイラに任せることができます。