面试题答案
一键面试DerivedStruct
内存布局及字节数分析:- 在32位系统默认对齐方式下,
int
类型占4字节,char
类型占1字节,short
类型占2字节。 - 对于
BaseClass
,int a
占4字节,char b
占1字节,由于默认对齐(通常是4字节对齐),b
之后需要填充3字节以满足4字节对齐,所以BaseClass
占用8字节。 DerivedStruct
继承自BaseClass
,再加上short c
占2字节,c
之后需要填充2字节以满足4字节对齐。- 因此,
DerivedStruct
实例占用的字节数为8 + 2 + 2 = 12字节。 - 内存布局如下:
- 前4字节存放
a
。 - 接着1字节存放
b
,后面3字节填充。 - 再接着2字节存放
c
,后面2字节填充。
- 前4字节存放
- 在32位系统默认对齐方式下,
DerivedClass
内存布局及字节数分析:- 当把
DerivedStruct
改为class DerivedClass : BaseClass { short c; };
时,在C++中,class
和struct
在继承和成员访问控制等方面有区别,但在内存布局上,对于这种简单继承结构且在相同对齐方式下,内存布局和占用字节数没有变化。 - 同样,
BaseClass
部分占用8字节,DerivedClass
新增的short c
及后续填充字节与DerivedStruct
情况相同,DerivedClass
实例也占用12字节。
- 当把
所以,无论是DerivedStruct
还是DerivedClass
,在32位系统默认对齐方式下,内存布局相同,占用字节数均为12字节。