面试题答案
一键面试-
计算
struct Outer
的大小:- 首先分析
struct Inner
的大小:char x
占1字节。double y
占8字节。由于结构体对齐规则,char x
会补齐到8字节(double
类型要求8字节对齐),所以struct Inner
大小为8 + 8 = 16字节。
- 然后看
struct Outer
:struct Inner inner
占16字节。int z
占4字节。char w
占1字节。int z
和char w
会补齐到8字节(因为struct Outer
整体按double
的8字节对齐,struct Inner
已经是8字节对齐的,所以struct Outer
后续成员也要按8字节对齐)。- 所以
struct Inner
大小为16 + 8 = 24字节。
- 首先分析
-
嵌套结构体场景下对齐规则生效方式:
- 结构体成员对齐:每个结构体成员的偏移量必须是该成员类型大小的整数倍。例如在
struct Inner
中,char x
占1字节,但为了满足double y
的8字节对齐要求,x
后会填充7字节。 - 结构体整体对齐:结构体的大小必须是其最大成员类型大小的整数倍。对于
struct Outer
,其最大成员类型是double
(8字节),所以struct Outer
的大小是8的整数倍。即使int z
和char w
加起来不足8字节,也要补齐到8字节,以满足整体对齐要求。
- 结构体成员对齐:每个结构体成员的偏移量必须是该成员类型大小的整数倍。例如在
所以struct Outer
的大小为24字节。