面试题答案
一键面试- 计算
struct A
原始顺序的大小- 字节对齐规则为4字节对齐。
char a
占1字节,由于要满足4字节对齐,它后面会填充3字节,此时已占用4字节。int b
占4字节,加上前面的4字节,共8字节。short c
占2字节,它后面会填充2字节以满足4字节对齐,此时结构体总大小为8 + 2 + 2 = 12字节。- 所以
struct A
原始顺序大小为12字节。
- 计算
union B
的大小- 联合体的大小是其最大成员的大小。
char a
占1字节,int b
占4字节,short c
占2字节,最大的是int b
,占4字节。- 所以
union B
的大小为4字节。
- 调整
struct A
成员顺序后的大小- 成员顺序变为
int b; char a; short c;
。 int b
占4字节。char a
占1字节,short c
占2字节,1 + 2 = 3
字节,为满足4字节对齐,后面需填充1字节。- 此时结构体总大小为4 + 1 + 2 + 1 = 8字节。
- 所以调整顺序后
struct A
的大小变为8字节,原因是调整顺序后减少了填充字节,提高了空间利用率。
- 成员顺序变为