0

重複の可能性:
構造体の sizeof が各メンバーの sizeof の合計と等しくないのはなぜですか?
C++ クラスのサイズはどのように決定されますか?

単一のchar変数でクラスのサイズを確認すると、サイズは1バイトです。しかし、整数を追加すると、突然 8 になります。理由を説明していただけますか?

class Char
{
  char b;
};
class Int
{
  int a;
};
class A
{
  int a;
  char b;
};

int main()
{
  Char Cobj;
  cout<<"Char size: "<<sizeof(Cobj)<<endl;
  Int Iobj;
  cout<<"Int size: "<<sizeof(Iobj)<<endl;
  A aobj;
  cout<<"A size: "<<sizeof(aobj)<<endl;

  return 0;
}

出力は次のとおりです。 Char サイズ: 1 Int サイズ: 4 A サイズ: 8

4

1 に答える 1

1

パディングのため、3 ダミー バイトが の後に追加されA::bます。

これはA、たとえば配列で適切に位置合わせするために行われます - の最初のメンバーはAint特定の位置合わせ (おそらく 4 または 8 バイト) を持たなければならない です。だからあなたが持っているなら

A arrayOfA[10];

4オブジェクト自体は、または8バイトに整列する必要があります。

于 2013-01-29T09:35:57.130 に答える