面试题答案
一键面试- C语言中结构体成员的对齐规则:
- 结构体成员的对齐是为了提高内存访问效率。
- 每个成员按其自身的对齐字节数(一般为其类型大小,例如
char
为1字节,short
为2字节,int
通常为4字节,double
通常为8字节等)进行对齐。 - 结构体的整体大小为其最大对齐字节数成员大小的整数倍。
- 结构体的起始地址也必须是其最大对齐字节数成员大小的整数倍。
- 分析
struct { char a; int b; short c; } testStruct;
占用的内存大小:char a
:char
类型占1字节。int b
:int
类型一般占4字节,由于char
只占1字节,为了满足int
的对齐要求(4字节对齐),在a
后需要填充3字节,此时从a
开始到b
共占4字节。short c
:short
类型占2字节,由于前面b
已经是4字节对齐,c
从第8字节开始存储,c
占2字节。- 整个结构体的最大对齐字节数是
int
的4字节,此时结构体总大小为1 + 3(填充)+ 4(b
)+ 2(c
)= 10字节,10不是4的整数倍,需要再填充2字节,使其大小为12字节,满足最大对齐字节数的整数倍。
所以,struct { char a; int b; short c; } testStruct;
占用12字节内存。