struct AA
{
short x;
char y;
int z;
};
struct BB
{
char a;
int b;
short c;
};
int main()
{
cout << sizeof(AA) << endl;
cout << sizeof(BB) << endl;
}
让我们来猜测一下 上述代码分别会输出什么?
“分别输出什么?这不是一样的吗??”我想好多不了解结构体内存对齐的人会这样想。很可惜他的输出结果如下:
明明两个结构体内成员变量类型数量都是一致的为什么会出现大小不相同的情况呢?
下面来引入我们要介绍的内容之——————
结构体内存对齐:
为什么会出现结构体对齐?
因为结构体对齐的目的是为了让结构体更高效完整的纳入到内存中,减少了未对齐数据需要额外存取时间的情况(类似于书籍装订成册 拿散页容易缺页漏页)。
结构体如何对齐?
一般来说,编译器会根据平台的对齐要求和最大对齐原则来决定结构体的大小,最大的基本类型确定对齐边界 再依次向边界范围大小单位内填充。所以上图输出结果才会导致AA大小为8字节、BB大小为12字节。
微观上 在一个对齐单位中也以最大单位对齐,然后依次向内填充比如AA中的 short 类型的x 和char类型的y 就在一个边界范围中内部进行 最大单位对齐原则。