学习
2018 年 3 月 21 日
结构体对齐
记录结构体对齐对内存优化的笔记
修改结构体对齐大小
#pragma pack(8) //对齐参数默认为8,可修改8改变对齐大小
strunct align
{
char a;
short b;
int c;
double d
}
#pragma pack
结构体对齐大小默认大型设置:项目右键→setting→C/C++→Code Generation
对齐原则
- 数据成员对齐规则:结构的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位中为4字节,则要从4的整数倍地址开始存储)
- 结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的用0补齐
- 如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储(
struct a
里存有一个struct b
,b
里有char
,int
,double
等元素,那b
应该从8的整数倍开始存储) - 对齐参数如果比结构体成员的sizeof值小,该成员的偏移应该以此值为准,也就是说,结构体成员的偏移量应该取二者的最小值
总结
定义结构体时按照数据类型由小到大的顺序进行书写,能避免内存空间浪费。