之前一直以为字节对齐没有问题,结果今天看书的时候发现了自己这部分还是掌握的不太好
1.先说最简单的
#include<stdio.h>
#include<string.h>
union data1{
double d;
int i;
char c1;
char c2[9];
};
int main()
{
printf("%d",sizeof(union data1));
return 0;
}
因为最大的类型是double8字节,所以以8字节对齐,char[9]自然分配了16字节
所以共用体占16字节
2.注意!!!不能固定记忆一定是以4字节取
#include<stdio.h>
#include<string.h>
struct data1{
char c1;
char c2[2];
};
int main()
{
printf("%d",sizeof(struct data1));
return 0;
}
因为最大是char,以1字节对齐,所以最后分配3字节,不是之前认为的4字节
3.分配空间的时候是看先后顺序的
struct data1{
char c1;
double d;
char c2;
}one;
struct data2{
char c1;
char c2;
double d;
}two;
两个都是以double的类型8字节对齐,但是one分配24字节,two分配16字节。