结构体对齐与内存计算
以64位系统为例,每个字占64位,也就是8字节,结构体的对齐规则为: 地址%min(变量大小,8) =0
eq:
typedef struct{
int a; // 4字节
char c; // 1字节
short b; // 2字节
}s1;
typedef struct{
char c; // 1字节
int a; // 4字节
short b; // 2字节
}s2;
typedef struct{
int a; // 4字节
short b; // 2字节
char c; // 1字节
}s3;
s1结构体布局为:| | | | | | | | |占用空间为8字节;int char short
s2结构体布局为:| | | | | | | | |
| | | | | | | | | 占用空间为10字节;
s3结构体布局为:| | | | | | | | | 占用空间为7字节;
总结:结构体对齐是一种以空间换时间的方法,通过模数存储提高单次访存的成功率;通常将结构体中空间较大的变量先声明以降低内存浪费。
快手公司福利 1244人发布