内存对齐例子详解

主要讲解例子

offsetof #include<srddef.h>

返回一个成员在其结构体起始位置的偏移量(字节)

右边是偏移量0-12

定义结构体变量s,

①第一个成员c1占偏移量为0字节的空间(深红色)

②第二个成员 i 自身大小4字节,默认对齐数8, 4 和 8较小值4作为对齐数,则i需要对齐到4的整数倍的空间开始,则从偏移量为4的空间往后依次占4个字节(绿色部分)

③第三个成员c2自身大小1字节,默认对齐数8, 1 和 8较小值1作为对齐数,则 c2 需要对齐到1的整数倍的空间开始,任何偏移量的空间都是1的整数倍,则直接在 i 挨着的下面一个空间占用一个字节(蓝色部分)

则此时整个结构体的大小为0~8,9个字节空间,结构体的总大小需要是最大对齐数的整数倍,最大对齐数是三个对齐数1 4 1中的4,则结构体的总大小是4的倍数,则让 9 再浪费三字节空间到了偏移量11的位置,总共12字节空间

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值