结构体内存 的对齐:每个成员分配内存的时候都要放在自己的整数倍的位置上。超过四个字节的都按照4的整数倍对齐。数组类型的成员分配内存是由数组元素的类型来决定。对齐的好处:便于成员的寻址。坏处:有内存的浪费。
默认情况下结构都是对齐和补齐的。
什么是补齐:
结构每个成员分配好内存后,从内存数也要检测,结构的从内存数必须是结构中的最大成员的整数倍,如果成员大小超过4个字节,按4个字节算,这叫做结构的补齐,结构在分配内存时每个成员要对齐,整个结构要补齐。
eg.
struct test{
char c;
int i;
char arr[5];
double d;
} 定义一个该类型结构体:从对齐来看c占第1-4个字节,i为int类型地址只能从4的整数倍的下一个开始,占第5-8个字节,接下来因为数组为char类型 所以 arr占从9-13,double类型占八个字节,但是超过四个字节,按4的整数倍对齐,所以double只能从第17个字节开始存储。该结构体一共占24个字节。从补齐的角度来检测,可以看到结构中最大数据 类型为double,大于4,但是只能为4的整数倍, 所以该结构占内存应该为4的整数倍。24正好为4的整数倍,所以该结构占24个字节。