面试题答案
一键面试- 默认对齐方式下
- 内存布局:
struct S1
中,char a
占1字节,int b
占4字节。由于默认对齐方式下,int
类型按4字节对齐,char a
后会填充3字节,所以struct S1
大小为8字节。struct S2
中,s1
占8字节,char c
占1字节。char c
后会填充3字节,以满足struct S2
整体按4字节对齐。
- 总大小:
struct S2
总大小为12字节。原因是结构体的对齐原则,结构体的大小必须是其最大成员对齐数的整数倍,struct S2
中最大成员类型为int
,对齐数为4,所以总大小为12字节。
- 内存布局:
#pragma pack(1)
时- 内存布局:
struct S1
中,char a
占1字节,int b
占4字节,不再有填充字节,struct S1
大小为5字节。struct S2
中,s1
占5字节,char c
占1字节,无填充字节。
- 总大小:
struct S2
总大小为6字节。因为#pragma pack(1)
取消了对齐优化,结构体成员紧密排列,总大小为各成员大小之和。
- 内存布局:
#pragma pack(2)
时- 内存布局:
struct S1
中,char a
占1字节,int b
占4字节。char a
后填充1字节,struct S1
大小为6字节。struct S2
中,s1
占6字节,char c
占1字节,char c
后填充1字节,以满足struct S2
整体按2字节对齐。
- 总大小:
struct S2
总大小为8字节。因为最大对齐数为2,结构体大小需为2的整数倍。
- 内存布局:
#pragma pack(4)
时- 内存布局:
- 与默认对齐方式下
struct S1
内存布局相同,struct S1
大小为8字节。 struct S2
中,s1
占8字节,char c
占1字节,char c
后填充3字节,以满足struct S2
整体按4字节对齐。
- 与默认对齐方式下
- 总大小:
struct S2
总大小为12字节。因为最大对齐数为4,结构体大小需为4的整数倍,和默认对齐方式下大小一致。
- 内存布局: