パディングの計算
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/09/19 14:58 UTC 版)
「データ構造アライメント」の記事における「パディングの計算」の解説
次の式は、データ構造の開始位置をアラインメントするのに必要なパディングバイト数を示す(modは剰余演算子)。 padding = (align - (offset mod align)) mod alignaligned = offset + padding = offset + ((align - (offset mod align)) mod align) 例えば、4ビットアライメントの構造体のオフセット0x59dに追加するパディングは3である。構造体は0x5a0(4の倍数)番地から開始する。ただし、offset のアライメントが align のアライメントと既に等しい場合、(align - (offset mod align)) mod align の2つ目の剰余演算はゼロを返すので、元の値は変更されない。 定義によりアライメントは2の累乗であるため、剰余演算はビット単位のAND演算に置き換えられる。 次の数式はアラインしたオフセットを生成する(& はビット単位のAND、~ はビット単位のNOT)。 padding = (align - (offset & (align - 1))) & (align - 1) = (-offset & (align - 1))aligned = (offset + (align - 1)) & ~(align - 1) = (offset + (align - 1)) & -align
※この「パディングの計算」の解説は、「データ構造アライメント」の解説の一部です。
「パディングの計算」を含む「データ構造アライメント」の記事については、「データ構造アライメント」の概要を参照ください。
- パディングの計算のページへのリンク