データ構造アライメント
アライメントの問題は、ハードウェアアドレス変換メカニズム(PCIリマッピング、MMUで実施)によるその領域の効率的なマッピングが目的である場合、C構造体よりもはるかに大きな領域に影響を与える可能性がある。
例えば、32ビットオペレーティングシステムでは、4 KBページは、任意の4 KBのデータチャンクだけではない。通常は、4 KB境界にアラインされたメモリ領域である。これは、ページをページサイズの境界にアラインすると、複雑な算術演算ではなくアドレスの上位ビットを置換することで、ハードウェアが物理アドレスに仮想アドレスをマップできるためである。
例: 物理アドレス0x12345000に仮想アドレス0x2cfc7000のTLBマッピングがあるとする(これらのアドレスは両方とも4 KB境界でアラインされている)。仮想アドレスva = 0x2cfc7abcにあるデータにアクセスすると、0x2cfc7〜0x12345のTLB分解能で、pa = 0x12345abcへの物理アクセスが行われる。ここで、20/12ビットの分割は幸いなことに、5/3桁の16進表現の分割に一致する。ハードウェアは、物理アドレス(0x12345)の最初の20ビットと仮想アドレス(0xabc)の最後の12ビットを単純に組み合わせることによって、この変換を実装できる。これは、仮想インデックス(abc)物理的タグ付け(12345)とも呼ばれる。
サイズ 2^(n+1)-1 のデータのブロックは、常に 2^n バイトにアラインされたサイズ 2^n の1つのサブブロックを有する。
以下は、アライメントの知識のない動的アロケータを使用して、スペースロスの2倍を犠牲にして、アラインしたバッファを提供する方法である。