互联网科技嵌入式编程

字节对齐align

2020-05-01  本文已影响0人  罗蓁蓁

关于对齐的问题,我们经常在运行程序的时候出现对齐异常,面试官也特别热衷于纠结字节对齐的问题,因此,记于此,解惑之。

show code

struct st1
  {
    char  a;
    int   b;
    short c;
  }

请问,这个结构体是几个字节?

答案是:12

struct st2
  {
    char  a;
    short b;
    int   c;
  }

请问,这个结构体是几个字节?

答案是:8

内存对齐规则

分析

也就是说:两个结构体,仅仅是里面包含的数据类型的位置变了,它的大小就会不一样!

这就是内存对齐的问题,也是编译器帮我们把每一个数据单元安排在了合适的位置。

那么,为何st1和st2不一样呢?

好吧,内存对齐规则说的太专业,其实说白了就是,在没有#pragma pack(n)下,默认都是4字节对齐。

对于st1,char是1字节,相邻的int是4字节,因此1+4>4了,所以char只能单独享用4字节了,同理short也是一样,因此就是4+4+4=12字节。

对于st2,char是1字节,相邻的short是2字节,因此1+2<4,所以char和short可以一起享用4字节了,而int在享用4字节,因此就是4+4=8字节。

晦涩的专业语言把道理精简再精炼,而白话文却能把道理婵婵道来,不得不说,语言的神奇。

小尾巴

出差必备:
买火车票、高铁票、机票,订酒店都打9折的出行工具TRIP,点击注册

优惠购物:
你还在傻傻的原价淘宝吗?来这里领取内部优惠券,折扣力度非常大!点击注册,注册需要邀请码UWD9Q9E。

上一篇 下一篇

猜你喜欢

热点阅读