
1. 结构结构尺寸的计算
2. 联合尺寸的计算
3. 枚举大小的计算
1. 结构结构尺寸的计算
实践两个规则:
1. 结构中每个成员的偏移量必须是该成员自身占用的内存大小的整数倍,否则,它将用空白字节填充.
2. 使用规则1计算结构的大小后,结构的大小必须是结构中最大成员变量的整数倍,否则将用空白字节填充.

偏移量: 结构的成员变量的位置与结构的第一个地址之间的距离
示例:
#include <stdio.h>
struct unknown {
char a;
char b;
int c;
long d;
int e;
};
int main () {
printf("%lu\n", sizeof(struct unknown));
return 0;
}
应用规则1:
1. 遇到变量a时,偏移量为0,变量大小为1
2. 遇到变量b时,偏移量为0 + 1 = 1,变量大小为1
3. 遇到变量c时,偏移量为1 + 1 = 2,变量大小为4,因为2不是4的整数倍,所以偏移量填充为4.

4. 遇到变量d时,偏移量为4 + 4 = 8,变量大小为8.
5. 遇到变量e时,偏移量为8 + 8 = 16,变量大小为1.
应用规则2:
根据规则1计算的结构的大小为17c 计算结构体大小,该结构的最大成员变量为8. 并且17不是8的整数倍,因此最终结构的大小为24
2. 联合尺寸的计算
遵循两个规则:
1. 联合的大小必须能够容纳联合中最大的成员变量

2. 规则1计算出的并集大小必须是在该联合中占据最大内存大小的成员类型的整数倍
示例:
typedef union u1{
char a[6];
int b;
}U1;
typedef union u2{
int a;
long b;
}U2;
typedef union u3{
char a[6];
char b[5];
}U3;
三个联合u1,u2和u3的大小分别为8、8、6
u1:
根据规则1c 计算结构体大小,最大成员变量为a [6],其大小为6.
根据规则2,最大成员类型为int,其大小为4. 6不是4的整数倍,因此6被填充为8,因此其最终大小为8

u2:
根据规则1,最大成员变量为b,其大小为8.
根据规则2,最大成员类型为long,其大小为8,因为8是8的整数倍,所以其最终大小为8
u3:
根据规则1,最大成员变量为a [6],其大小为6
根据规则2,最大的变量类型为char,其大小为1,而6为1的整数,因此其最终大小为6
3. 枚举大小的计算
枚举的大小与整数的大小相同. 全部4
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-260132-1.html
中国几十年前就打过3--4次好不好
期待烊烊