面试题答案
一键面试- 内存布局分析:
struct Inner
中,char a
占1字节,int b
占4字节。由于内存对齐规则,char a
后会填充3字节,使得struct Inner
的大小为8字节(以int
的4字节对齐,1 + 3 + 4 = 8
)。struct Outer
中,包含struct Inner
,其大小为8字节,然后是short c
占2字节。因为struct Outer
整体也要按照最大成员类型(这里是int
,4字节对齐),short c
后不需要填充,struct Outer
的大小为10字节(8 + 2 = 10
)。
- 内存对齐规则应用:
- 结构体成员对齐:结构体的每个成员相对于结构体首地址的偏移量(offset)必须是该成员大小的整数倍。在
struct Inner
中,a
占1字节,偏移量为0,满足1字节对齐;b
占4字节,所以a
后要填充3字节,使得b
的偏移量为4,满足4字节对齐。 - 结构体整体对齐:结构体的大小必须是其最大成员类型大小的整数倍。在
struct Outer
中,最大成员类型是int
(4字节),struct Inner
大小为8字节,short c
占2字节,总大小为10字节,满足4字节对齐(10是4的2倍多2字节,但已满足整体对齐要求)。
- 结构体成员对齐:结构体的每个成员相对于结构体首地址的偏移量(offset)必须是该成员大小的整数倍。在
- 计算
struct Outer
大小:struct Outer
的大小为10字节。
总结:struct Outer
内存布局为struct Inner
(8字节)在前,short c
(2字节)在后,整体大小为10字节,内存对齐规则按上述方式应用。