一般情况下:
1.结构体变量中成员的偏移量必须是成员大小的整数倍;
2.结构体大小必须是所有成员大小的整数倍,即所有成员大小的公倍数。
struct example1
{
double d;
int i;
int ii;
};
struct example2
{
int i;
double d;
int ii;
};
即 结构体example1的大小为8(double)+4(int)+4(int) = 16
examples的大小为4(int)+4(补齐)+8(double)+4(int) = 20,但是20不是8(double)的整数倍,所以在int ii 的后面又补齐了4个字节,最后结构体example2的大小为24。
不是一般的情况:嵌套结构体
1.展开后的结构体的第一个成员的偏移量(嵌套的结构体偏移量)应当是被展开的结构体中最大成员的整数倍;
2.结构体大小必须是所有成员大小的整数倍,这里计算的是展开后的成员,而不是将嵌套的结构体看作一个整体。
struct AA
{
char c;
int i;
};
struct BB
{
char c;
AA aa;
int i;
};
结构体BB的大小为1(char)+3(不全)+4(结构体)+4(int)=12