任何人都可以解释为什么objC
的大小是8而不是12?
我认为,如果它在课程C
中我有int
类型的对象和A
,B
- char
,那么创建后对于objC
,objA
和objB
,ObjC
应为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
};
答案 0 :(得分:5)
我相信class C
会:
要保持整数在边界上对齐,将有2个字节的填充,使 8个字节 。
你怎么得到12 ??
在您的第二个示例中,class C
将包含:
大小向上舍入到最接近的4个字节,即12。
答案 1 :(得分:2)
在第一种情况下,有一个填充。在第二种情况下,有两个填充。
第一种情况是:
+---+---+---+---+---+---+---+---+
| a | b | | | c |
+---+---+---+---+---+---+---+---+
<- 4 ->|<- 4 ->|
第二种情况是:
+---+---+---+---+---+---+---+---+---+---+---+---+
| a | | | | b | c | | | |
+---+---+---+---+---+---+---+---+---+---+---+---+
<- 4 ->|<- 4 ->|<- 4 ->|