大小有点奇怪
Strange thing about sizeof
谁能解释一下,为什么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
};
我相信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 ->|
相关文章:
- 没有找到相关文章