sizeof(char) = 1
sizeof(short) = 2
sizeof(int) = 4
sizeof(long) = 4
sizeof(float) = 4
sizeof(double) = 8
struct stu
{
short c;
char b;
int b;
}aa;//大小为8
计算方法
1.字节对齐原则
用结构体里面最大的数据类型的大小和 4 进行比较,按照字节数小的为单位开辟空间
2.节省空间原则,减少空间浪费
32位和64位结构体大小不同
以32位为例:与4比较
struct stu
{
short c; //short大小为2,与4字节比较小于4
char b; //char大小为1,与4字节比较小于4,与short一共3字节,共用4字节。
int b; //int大小为4,等于4,占用4字节
double a; //double大小为8,大于4,开辟两个4字节空间
}aa; //大小为16
64位与8比较:
struct stu
{
short c; //short大小为2,与8字节比较小于8,
char b; //char大小为1,与8字节比较小于8,与short一共3字节,共用开辟的8字节。
double a; //double大小为8,等于8,开辟8字节空间
int b; //int大小为4,小于8,开辟8字节
}aa; //大小为24
注意:
如果第一个用不完开辟的地址,需要判断下一个的大小能够占满剩余的空间吗,如果可以占满就共用开辟的地址;如果还有剩余继续看下一个,如果放不开就前两个共用,再重新开辟地址存放。如果大于比较的地址就再开辟地址存放,如32位double需要开辟两个4字节地址。