结构体内存对齐

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 就在一个边界范围中内部进行 最大单位对齐原则。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值