当我们定义一个结构体时 结构体中可能含有若干属性 假如我们顶一个结构体Student:
typedef struct student
{
char a;
int b;
float c;
double d
}stu;
int main()
{
int a = sizeof(stu);
printg("%d\n",a);
}
这个结果为
看来结构体的大小并不是简单的将结构体中所有数据类型相加那么简单
这是因为结构体中存在“内存对齐”
如图 a为char类型,b为int 类型 系统在读取这些内存数据时就会默认3个红格子来补齐内存 以便于下一趟时不会产生差错;
typedef struct student
{
char a;//1+3
int b;//4
float c;//4+4
double d;//8
}stu;
在算结构体大小的时候要对齐内存如上图代码中 a的内存为1 在加上吧int型时 内存要加3
和b加起来就为8,8时float型的倍数 所以直接加上c的大小为12;12不是double型的倍数所以加上4为16,最后在加上double型的大小就为24了;
注意 结构体最后的大小还应该是 结构体拥有的最大的类型的倍数;
如例子中double的大小为8 24恰好是8的倍数就不做处理;而在为别的数时就要继续对齐。