一、 字节对齐及其相关实现语句

字节对齐及其相关实现语句

前言
在CSDN摸鱼数年,这篇blog终于结束了我的“白嫖”生涯,希望借此可以将自己遇到的问题与想法记录下来方便自己温习,当然如果有幸能帮助到一些人也是极好的。恰巧最近遇到字节对齐的bug,查阅资料与实际测试后在此分享一些自己的理解。

字节对齐概念
字节对齐常用在结构体、联合以及一些数组定义中,因结构体中成员类型多种多样,在程序中考虑CPU访问效率以及内存管理的时候经常会用到字节对齐。
所谓“字节对齐”是指变量存储地址是其类型长度的整数倍,例如int型变量设置字节对齐后其存储地址应是4的整数倍,同理short型变量其存储地址应该是2的整数倍。

字节对齐的目的
上一小节已经提到在考虑CPU访问效率以及内存管理的时候经常会用到字节对齐。当数据存储地址是字节对齐的时候,CPU只需读取一次即可将数据全部取到。若不是字节对齐的,则要读取数次,如下图所示,如果将int型数据存储在0x01处,则其存储地址范围为0x01-0x04,则CPU在读取数据时要先后读取0x00-0x01、0x02-0x03、0x04-0x05,最后保留有效数据组合成一个整型数据(从一篇文章中看到的解释)。在这里插入图片描述

1、字节对齐实现方法:__attribute__((aligned(n)))
__attribute__((aligned(n)))语句中:
n = 2 i n=2^i n=2ii为非负整数。下面看一下程序及实际执行后的结果:

/2字节对齐*/
typedef struct __attribute__((aligned(2))){
   
    char m1;
    short m2;
    char m3;
} a_t;
a_t a;

运行结果:

结构体字节长度:6
成员起始地址:
m1:536887516
m2<
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值