面试题答案
一键面试- 计算
Outer
结构体的大小:- 首先看
struct Inner
:short a
占2字节,按2字节对齐。char b
占1字节,因为short
按2字节对齐,char
会补齐到2字节边界,所以struct Inner
大小为4字节。
- 接着看
struct Outer
:struct Inner inner
大小为4字节。int c
占4字节,按4字节对齐,它从4字节边界开始存储,这里刚好满足对齐要求。char d
占1字节,int
按4字节对齐,char
会补齐到4字节边界,所以struct Outer
大小为4 + 4 + 4 = 12字节。
- 首先看
- 结构体嵌套时对齐规则:
- 结构体成员按照定义顺序存储。
- 每个成员的偏移量(相对于结构体起始地址的距离)必须是其自身对齐字节数的倍数。如果当前位置不满足对齐要求,编译器会在成员之间插入填充字节。
- 结构体的总大小必须是其最大对齐成员对齐字节数的倍数。在
struct Outer
中,最大对齐成员是int
,对齐字节数为4,12是4的倍数,满足该规则。
所以,struct Outer
的大小是12字节。