1,探讨:
struct AA
{
int a;
char b;
short c;
};
和
struct BB
{
char b;
int a;
short c;
};
这两者所占字节是否一样?
2,结果:
int main()
{
printf("%d\n", sizeof(struct AA));//8字节
printf("%d\n", sizeof(struct BB));//12字节
return 0;
}
3,原因:
(1)以最大的基本类型对齐;
(2)在微观中也是。
4,解释:
先来看AA:
1 2 3 4
a a a a
b c c
首先AA中最大的为int类型,所以接下来的每一行都将以int类型所占字节进行对齐,也就是每一行不管满没满都会占有四个字节;然后按照顺序依次填入;第二行时由于char和short都能放下所以进行微观对齐,因为short占的字节更多所以以short占字节个数为基准两个两个放,所以最后占8个字节;
同理BB:
1 2 3 4
b b
a a a a
c
BB中最大的仍为int类型,所以每行4个字节,第一行short占了2个字节后还剩两个不够int使用,所以int再另开一行,最后所需12个字节。