对数据对齐的一些思考:
参见inforoc的文章。
下面是在solaris8上的试验结果:
联合的sizeof值为联合内最大数据类型的size;
结构的sizeof值为结构内最大数据类型size的整数倍。对齐的原则是数据项只能存储在地址是数据项大小的整数倍的内存位置上。因此,补齐的部分都是加在最靠近size比之大的数据项的那个变量身上。
举例而言:
union{
char a;
int b;
float c;
double d;
}utest;
sizeof(utest)=8; //sizeof的值是联合内最大数据类型的size。
struct{
char a;
int b;
double c;
char d;
char e;
char f;
char g;
char h;
int j;
}stest;
sizeof(stest)=32; //补齐发生在a后面3个字节;h后面3个字节;j后面4个字节。