データ構造アライメント
CとC++では、コンパイラがスペースを節約するために構造体メンバを並べ替えることはできないが、他の言語では可能である。また、大部分のC/C++コンパイラでは、構造体のメンバを一定のアラインレベルで「パック」することもできる。例えば、"pack(2)"は、バイトよりも大きいデータメンバを2バイト境界にアラインメントさせることを意味する。全てのパッディングメンバは最大で1バイト長である。
このような「パック」構造の用途の1つは、メモリを節約することである。例えば、1バイトと4バイトの整数を含む構造体には、さらに3バイトのパディングが必要となる。このような構造体の大きな配列は、パックされている場合はメモリ使用量を37.5%減らすことができるが、各構造体へのアクセスには時間がかかる。この妥協は、時間と空間のトレードオフの一形態と考えることができる。
「パック」構造の使用は、メモリ空間を節約するために最も頻繁に使用されるが、標準プロトコルを使用して送信するためにデータ構造をフォーマットするために使用することもできる。しかし、この使用法では、構造体メンバの値が、プロトコルによって要求されるエンディアン(多くの場合ネットワークバイトオーダ)で格納されるように注意する必要がある。これは、ホストマシンがネイティブに使用するエンディアンとは異なる場合がある。
ほとんどのRISCプロセッサは、ロード命令やストア命令でアラインされていないアドレスにアクセスすると、アライメントフォールトを生成する。これにより、オペレーティングシステムは、他の命令を使用してアラインされていないアクセスをエミュレートできる。例えば、アライメントフォールトハンドラは、大きなロード命令やストア命令をエミュレートするために、バイト単位のロードやストア(常にアラインされている)を使用する場合がある。
MIPSなどのいくつかのアーキテクチャでは、特別なアラインされていないロード命令とストア命令がある。1つのアライメントされていないロード命令は、最も低いバイトアドレスを持つメモリワードからバイトを取得し、別のロード命令は、最も高いバイトアドレスを持つメモリワードからバイトを取得する。同様に、ストア・ハイ命令およびストア・ロー命令は、それぞれ上位および下位メモリワードに適切なバイトを格納する。
Alphaアーキテクチャでは、アライメントされていないロードおよびストアに対する2段階のアプローチがある。