面试题答案
一键面试- 结构体和联合体内存分配方式的不同:
- 结构体:结构体中的每个成员都有自己独立的内存空间,内存大小是所有成员大小之和,并且为了满足内存对齐规则,可能会在成员之间填充一些额外的字节。
- 联合体:联合体的所有成员共享同一块内存空间,内存大小是其最大成员的大小,以满足最大成员的存储需求。
- 计算
myStruct
和myUnion
占用的内存大小及原因:myStruct
:- 在32位系统下,
int
通常占4字节,char
占1字节,short
占2字节。 - 由于内存对齐规则,假设结构体的起始地址为0。
int a
从地址0开始,占用4字节(0 - 3)。char b
占1字节,为了满足short c
的2字节对齐要求,在char b
后填充3字节,char b
实际占用地址4,填充后到地址7。short c
从地址8开始,占用2字节(8 - 9)。 - 所以
myStruct
占用的内存大小为4 + 1 + 3 + 2 = 8字节。
- 在32位系统下,
myUnion
:- 联合体中
int
占4字节,char
占1字节,short
占2字节。 - 因为联合体所有成员共享同一块内存空间,其大小取最大成员的大小,这里最大成员是
int
,占4字节。 - 所以
myUnion
占用的内存大小为4字节。
- 联合体中