struct的成员对齐
注意:为了方便说明,等号左边是每个数据单独所占长度,右边是最终空间大小,以字节为单位。
一、什么时间存在对其问题:(32位机对齐方式是按照4字节对其的,以下所有试验都是在32位机上验证的)
当结构体成员数据按照其顺序组合,无法按4字节对齐时,存在对其问题。
如:
1+1=2;
1+2=3;
1+2+1=4(而不是6或者其他);
2+1=3;(不是4)
以上是不存在对其问题的(因为没有超过4字节)。
如:
1+4=8;
4+1=8;
1+4+1=12;
1+2+4=8;
1+3+4=8;
以上就存在对其问题,有超过4字节的数据。
二、存在对其问题时,应该如何对齐:
当发生对其问题时,对其原则有两点:
①当所有成员数据和<=4时,结构体大小就是数据大小的和。
②连续数据类型的数据,如果可以组合成4,则将其组合,以节省空间。
③当和>4时,小于4字节的数据类型,其实际大小取min(4,max(所有数据类型大小))。注:所有数据类型大小,实质基本数据类型,不包括数组,结构体,
如:
char[5] 5=5; 超过的一个字符,时间大小=min(4,1)=1;
1+2+4=8; 组合1、2,结果为8,而不是12.
char + double +char =16; 实际是4+8+4=16;
附录:
①在32位机中下边基本数据类型及其长度(byte):
char: 1
short: 2
int: 4
long: 4
long long:8
pointer: 4
pointer: 4
enum: 4
double: 8
float: 4