大小有点奇怪

Strange thing about sizeof

本文关键字:      更新时间:2023-10-16

谁能解释一下,为什么objC的大小是8,而不是12?

我认为,如果它在类C中,我有类型为intA, B - char的对象,那么在创建objC之后,objA, objBObjC应该是4个字节。

class A {
    char a;
};
class B : A {
    char b;
};
class C : B {
    int c;
};
int main()
{
    A objA;
    B objB;
    C objC;
    cout << sizeof(objA) << endl; // 1
    cout << sizeof(objB) << endl; // 2
    cout << sizeof(objC) << endl; // 8! Why not 12?
    return 0;
}

编辑1:

本例中sizeof(objC)为12:

class A {
    char a;
};
class B : A {
    int b; // Here is int
};
class C : B {
    char c; // Here is char
};

我相信class C将有:

  • 2x 1字节字符
  • 2字节的填充,因此int从4字节的边界开始。
  • 1x 4字节整型
  • 总共8字节

为了保持整数在边界上对齐,将有2个字节的填充,使为8个字节

你怎么得到12??


在第二个示例中,class C将有:

  • int前的3字节填充。(将int保持在4字节边界上)
  • 总共9个字节

大小四舍五入到最接近的4字节,即12。

在第一种情况下,有一个填充。在第二种情况下,有两个填充。

第一个例子是:

+---+---+---+---+---+---+---+---+
| a | b |   |   |     c         |
+---+---+---+---+---+---+---+---+
<-     4      ->|<-    4      ->|

第二种情况是:

+---+---+---+---+---+---+---+---+---+---+---+---+
| a |   |   |   |     b         | c |   |   |   |
+---+---+---+---+---+---+---+---+---+---+---+---+
<-     4      ->|<-    4      ->|<-    4      ->|
相关文章:
  • 没有找到相关文章