数据对齐
处理结构体中的成员时,成员在内存中的起始地址编码必须是成员类型所占字节数的整数倍。
数据类型所占字节数见:类型尺寸。
sizeof计算结构体尺寸规则
结果必须是结构体中占用空间最多的成员所占字节数的整数倍。
例1:计算此结构体的空间 sizeof(st1)
struct st1
{
char a;
short b;
int c;
double d;
};
此结构体成员中占空间最多的成员是double类型,8字节。即结果是8的整数倍16。
例2:计算此结构体的空间 sizeof(st2)
struct st2
{
char a;
short b;
double c;
int d;
};
结果是24。
结构体嵌套时的sizeof运算
例1:
struct s1
{
char a[4];
}
sizeof(struct s1) = 4;
a[4]可以看成4个char。 结构体s1中最大占空间最多的基本类型是char,而不是char[4]。
例2:
struct s2
{
char a[4];
char b;
}
同理,sizeof(struct s2) = 5。
例3:
struct s3
{
struct s_a
{
int a;
} a;
char b;
};
这种多重结构体的情况,思路看最底层的数据的占空间的大小。
这里内层sizeof(struct s_a) = 4,是s3的各级成员中占空间最多的。s3的大小是4的整数倍。
sizeof(struct s3) = 8。
例4:
struct s4
{
struct s_a
{
char a[4];
} a;
char b;
};
同理,s4中占空间最大的类型是char。
sizeof(strcut s4) = 5。