结构体对齐
题目 1
题目:给定结构体,请问他的 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
题目 2
题目:给定结构体,请问他的 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 × ×