BohYoh.comトップページへ
C & C++ FAQ
目次

C C++ 構造体の大きさがメンバの合計とならないのはどうしてですか。

 char型オブジェクトの大きさは1バイトですが、それ以外の型のオブジェクトは、処理系や環境によっては、偶数番地を先頭に配置される、あるいは4で割り切れる番地を先頭に配置される、といった制限を受けることがあります。
 このように、『特定の型のオブジェクトを特定のバイトアドレスの倍数のアドレスをもつ記憶域境界に割り付ける要求』のことを、境界調整alignment)と呼びます。
 図の構造体を考えましょう。ここで、siezof(int)2であると仮定します。
■ 根拠 ■
標準C §6.5.2.1 Structure and union specifiers
標準C99 §6.7.2.1 Structure and union specifiers
標準C++ §5.3.3 Sizeof

戻る

BohYoh.comロゴ