结构体成员存放的地址要能整除该成员本身的大小 1.前面所有成员的大小相加应该是当前成员大小的倍数 2.整个结构体的大小应该能是该结构体中单个最大成员大小的倍数 struct A { char a; char arr[3];//保留,不使用,解决内存对齐不一致问题 int b; }; 如图所示。在这里char a;占一个格子,int b;占四个格子。但是为了加快运行速度它选择那个最大也就是4的倍数。 举例子说明一下 struct B { char a;//1+1 short b;//2 int c;//4 };//8 struct C { int a;//4 char b;//1+1 short c;//2 };//8 struct D { char a;//1+3 int b;//4 short c;//2 };//10 struct E { int a;//4 char b;//1 };//5+3 这个是向后对齐是因为要考虑数组。 struct F { int a;//4+4 double b;//8 float *c;//4,指针占四个。 };//20+4 struct H { char a;//1+3 struct HH { int b; long c; }d;//8 };//12 结构体里面嵌套结构体,上面的那个char a;应该是里面结构体里最大的int的倍数。