这篇文章讲的非常好 : http://blog.csdn.net/hairetz/article/details/4084088
用空间换时间,
规则 : 每个数据成员存储的起始位置都要是它的整数被或者它子成员的整数倍, 并且结构体总长度是它内部最大成员的整数倍, 不足补齐.
#include<stdio.h> typedef struct a{ int id; //[0]...[3] double height; //[8]...[15] char name[10]; //[20]...[29] //整体长度必须为 8 的整数倍, 否则自动补齐, 所以长度是 32, 符合8的整数倍 }A; typedef struct b { int no; //[0]...[3] A b; //[8]......[40] A中成员最大为8 , 不是10. 所以从8的整数倍开始。 总长度为 40, 符合8的整数倍 }B; int main(){ printf("%d %d ", sizeof(A), sizeof(B)); exit(0); }
可以使用 #pragma pack(n) 使用自己的对齐方式.
#pragma pack(1) 屏蔽掉了内存对齐.