struct s
{
int a;
char b;
double c;
};
struct m
{
char b;
double c;
int a;
};
int main()
{
struct s x;
struct m y;
printf("%d\n", sizeof(x));
printf("%d\n", sizeof(y));
}
在vs的环境下第一个大小为16,第二个大小为24
为什么呢?首先我们得搞清楚结构体的对齐原则
所以说根据对齐原则,改变结构体内部类型参数的顺序会改变结构体的整体大小,因此在使用结构体的过程中将类型大小相近的参数堆放在一起会节省更多空间
struct s
{
int a; 4 默认对齐数8 8大于4 用4做对齐数
char b; 1 由上对齐数是1
double c; 8 由上对齐数是8
};
struct m
{
char b; 1 默认对齐数8 8大于1 用1做对齐数
double c; 8 由上对齐数是8
int a; 4 由上对齐数是4
};
让我们来浅算一下
strcut m的情况更为特殊,因为最后填入int类型的参数后总体结构体大小20不是对齐数8的倍数,所以得补充空间使其变成倍数。