1、计算结构体的大小
struct S1
{
char c1; // 1 byte,默认对齐数为8,所以c1的对齐数是1,第一个成员变量放在与结构体变量偏移量为0的地址处
int i; // 4 byte,默认对齐数为8,所以i的对齐数是4,所以i要放到偏移量为 4的整数倍 的地址处
char c2; // 1 byte,默认对齐数为8,所以c2的对齐数是1,所以c2要放到偏移量为 1的整数倍 的地址处
//最大对齐数是4
//成员大小为9,不是最大对齐数4的整数倍,所以结构体总大小为12
};
printf("%d\n", sizeof(struct S1));
原理分析:
练习题:
// 练习1
struct S2
{
char c1; // 1 byte / 8,对齐数是1,
char c2; // 1 byte / 8,对齐数是1,
int i; // 4 byte / 8,对齐数是4,
// 最大对齐数是4
// 成员大小为8,是最大对齐数的整数倍,所以结构体总大小为8
};
printf("%d\n", sizeof(struct S2));
// 练习2
struct S3
{
char c; // 1/8,