一.结构体内存对齐
(一)首先得掌握结构体的对齐规则
1.第一个成员在与结构体变量偏移量为0的地址处。
2.其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
3.对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。在VS中默认的值为8
4.结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。
5.如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整
体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。
(二)结构体内存对齐的作用
结构体的内存对齐是拿空间来换取时间的做法,以消耗较多的空间来减少运算的时间,从而提高计算效率,因此在设计结构体的时候,我们既要满足对齐,又要节省空间,即为将占用空间小的成员尽量集中在一起。
二.结构体内存的计算
1.训练一
struct S1
{
char c1;
int i;
char c2;
};
int main()
{
printf("%d\n", sizeof(struct S1));
}
运算结果:
2.训练二
struct S2
{
char c1;
char c2;
int i;
};
int main()
{
printf("%d\n", sizeof(struct S2));
}
运算结果:
3.常见的结构体内存计算
struct S3
{
double d;
char c;
int i;
};
int main()
{
printf("%d\n", sizeof(struct S3));
}
运算结果:
3.1例三解题思路:
4.嵌套结构体的内存计算
struct S3
{
double d;
char c;
int i;
};
struct S4
{
char c1;
struct S3 s3;
double d;
};
int main()
{
printf("%d\n", sizeof(struct S4));
}
运算结果: