题目:给定结构体,请问他的 sizeof 大小?
struct data{
char t1;
char t2;
unsigned short t3;
unsigned long t4;
};
答案:
我们这里假设用的是 32 位的系统,所以一次最多能取 4 个字节。先定义 t1 和 t2 发现都是 char 类型,所以会一共定义 2 个字节空间。
t3 是 short 类型,会正好填满上面剩下的 2 个字节空间。
t4 是 int 会另外再开 4 个空间,故 sizeof 大小为 8 个字节。
t1 t2 t3 t3
t4 t4 t4 t4
题目:给定结构体,请问他的 sizeof 大小?
struct data{
char t1;
int t2;
short t3;
};
答案:
因为结构体对齐的默认原则就是按顺序定义类型时,只要遇到更大的类型,那么之后定义空间时就按最大的类型空间来定义。
我们这里还是假设用的是 32 位的系统,一次最多能取 4 个字节。所以 t1 会先定义 1 个空间,但是后面遇到了 t2 是 int 类型,而最多一次只能取 4 个字节,t2 如果定义在 t1 后面就无法一次性取完,则 t1 后面剩下的 3 个空间会被空出来,而再定义 4 个空间给 t2 。
t3 是 short 类型即占 2 个字节,但是由于已经遇到更大的类型 int ,所以这里还是会开 4 个字节给 t3 ,故 sizeof 大小为 12 个字节。
t1 × × ×
t2 t2 t2 t2
t3 t3 × ×