境界調整

境界調整 (aligmment)とは、「特定の型のオブジェクトを特定のバイトアドレスをもつ記憶域境界に 割り付ける要求」のことです。
例えば、偶数番地/4 で割り切れる番地/8で割り切れる番地 etc… にオブジェクトを配置するという制限が、 処理系によって課せられるのが一般的です。
この制限のことをバウンダリと呼びます。
(ただし、1 byteであるchar型には、そのような制限が課せられることはありません。)

ここで、sizeof(int)が 2 byteであるとした場合、int型の配置に制限を設けない処理系では、 構造体testは 4 byte となります。(図[a]参照)
ところが、偶数番地を先頭にint型のオブジェクトを配置する処理系では、図に示すように 6 byteになります。
int型のメンバnxの戦闘が偶数番地となるように、黒く示している「詰めもの」が埋め込まれます。(図[b]参照)

この「詰めもの」は、コンパイラが奇数を避けるために置かれる無意味なデータであり、この無意味なデータを パディング、これが置かれた領域をパディング領域と呼びます。
実際には奇数アドレスを避けるだけではなく、アクセスするデータサイズに応じてアドレスを調整します。

境界調整の記述例

// struct program in C.
struct test
{    
    char    c1;
    int     nx;
    char    c2;
}

変数アドレス

バウンダリ

バウンダリ(boundary) とは、複数バイトの一括メモリーアクセス時に、一定の数で割り切れるアドレスに アクセスしなければならないという制限。
アドレス境界、バイト境界、オクテット境界などとも。


Last updated:2018/09/02
Author:efn

';