面试题答案
一键面试- 内存布局分析:
- 在C++中,结构体
A
包含一个int
类型成员a
(通常在32位和64位系统中占4字节),一个char
类型成员b
(占1字节),一个short
类型成员c
(占2字节)。 - 由于结构体存在内存对齐规则,以提高内存访问效率。通常对齐模数是结构体中最大基本数据类型的大小,这里
int
是最大基本数据类型,大小为4字节,所以对齐模数为4。 a
的起始地址是4字节对齐的,占用4字节。b
虽然只占1字节,但为了满足4字节对齐,它后面会填充3字节,使其偏移量是4的倍数。c
占2字节,从偏移量8开始存储,此时不需要额外填充。
- 在C++中,结构体
- 大小计算:
a
占用4字节,b
及其填充共4字节,c
占用2字节,总共大小为4 + 4 + 2 = 10字节。- 由于整个结构体也要满足4字节对齐,所以最终结构体
A
的大小为12字节。
结论:结构体A
实例化对象大小为12字节,原因是内存对齐规则导致成员之间及结构体整体需要满足一定的对齐要求。