struct A
{
int a;
char b;
short c;
{
char b;
int a;
short c;
double d;
};
{
int a;
char b;
short c;
};
开辟内存8字节
struct B
{
char b;
int a;
short c;
};
开辟内存12字节
struct C{
char b;
int a;
short c;
double d;
};
开辟内存24字节
A,计算为4+1+补1+2;
B,计算为1+补3+2+补2;
C,计算为1+补3+4+2+补6+8;
个人总结有三种规律,(助记备忘)
一、如果前面数据较大,前面数据可不用担心补位,如int a; char b; a是不用补位的。
二、如果后面数据较大,则前面数据必须要计算是否补位,补位规则:假如初始地址为0,到该后面数据的地址为该数据长度的整数倍。
三、结尾时,需要计算是否补位,应补成该结构体长度为最大数据长度的整数倍。
别人总结:
一、结构体变量的首地址能够被其基本类型成员的大小所整除;
二、结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节;
三、结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节;