面试题答案
一键面试- 计算
struct Inner
的大小,并解释内存对齐的原理如何影响其大小:struct Inner
的大小:在常见的32位或64位系统中,char
类型占1字节,int
类型通常占4字节。由于内存对齐的原则,结构体的成员存储地址需要是其自身大小的整数倍。char a
占1字节,int b
占4字节,为了满足int b
的内存对齐要求(其地址要是4的倍数),a
后面会填充3字节,所以struct Inner
的大小为1 + 3 + 4 = 8
字节。
- 计算
union Outer
的大小,并阐述联合体成员共享内存对其大小的影响:union Outer
的大小:联合体的大小是其最大成员的大小。在union Outer
中,struct Inner s
大小为8字节,char arr[sizeof(struct Inner)]
大小也是8字节,所以union Outer
的大小为8字节。联合体成员共享内存,其大小取决于最大成员,这样设计是为了保证所有成员都能在共享的内存空间中正确存储。
- 如果修改
struct Inner
中成员的顺序为int b; char a;
,struct Inner
和union Outer
的大小会如何变化,为什么:struct Inner
的大小:int b
占4字节,char a
占1字节,a
在b
之后,无需额外填充,所以struct Inner
的大小为4 + 1 = 5
字节。由于内存对齐要求结构体大小为其最大成员大小的整数倍,所以struct Inner
最终大小为8字节(int
类型大小4字节的2倍)。union Outer
的大小:union Outer
的大小取决于其最大成员,此时struct Inner s
大小为8字节,char arr[sizeof(struct Inner)]
大小也是8字节,所以union Outer
的大小仍为8字节。