相关内容:C专家编程P159
为了操作系统存取内存数据的效率,编译器编译的时候根据相应的数据类型进行字节进行对其,这些对应用程序员完全透明的,所以我们经常忽视其背后的细节,结构体或者枚举类型总的大小都必须是占空间最大成员的空间的整数倍(向上取整,零头的内存并不使用),并且每个数据成员起始地址都与其所占大小相对应,第一个数据成员默认偏移为0,后续的数据成员的偏移与其数据类型有关,这样结构体所占空间大于理论计算出的使用空间;下面是个简单的例子
struct stru1
{
char a;
int b;
short c;
}
struct stru2
{
short c;
char a;
int b;
}
sizeof(stru1)=12 而 sizeof(stru2)=8