在下面定义的结构体中,int占用4字节,double占用8字节,而打印出来结构体的大小却为16字节:
#include<stdlib.h>
#include<stdio.h>
struct Person{
int age; //4字节
double salary; //8字节
};
int main(int argc, char const *argv[])
{
int size = sizeof(Person);
printf("size = %d",size); //打印size =16
getchar();
return 0;
}
如果在Person中添加属性大小为10的name,打印的却是24:
struct Person{
int age; //4字节
double salary; //8字节
char name[10];//10字节
};
如果再将name的size改为18后,则会打印32;
struct Person{
int age; //4字节
double salary; //8字节
char name[18];//18字节
};
根据上面的例子可以总结出计算结构体大小的规则,字节对齐:
1、在计算时会按照最大的字节去计算;
2、如果Person中在添加char name[10],打印的是24。计算的时候只会按照基本数据类型去算。
3、如果将上面的name的size改为18后,打印32:首先会把所有的字节数加起来看是否能够整除最大基本数据类型属性的字节数,如果不够向上累加,一直加到能整除为止。