ARM中的对齐问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ARM中的对齐问题

在ARM 中,当吧一个内存区域初始化为某个结构体时,必须注意字节对

齐情况。1. 简介

在ARM 中,有ARM 和Thumb 两种指令。ARM 指令:每执行一条指令,PC 的值加4 个字节(32bits).一次访问4 字节内容,该字节的起始地址必须是4 字节对齐的位置上,

即地址的低两位为bits[0b00],也就是说地址必须是4 的倍数。Thumb 指令:每执行一条指令,PC 的值加2 个字节(16bits).).一次访问2 字节内容,该字节的起始地址必须是2 字节对齐的位置上,

即地址的低两位为bits=0,也就是说地址必须是2 的倍数。

遵循以上方式叫对齐(aligned)方式,不遵守这样方式称为非对齐(unaligned)的存储访问操作。

ARM CPU 不支持未对齐双字(8 bytes)访问。

双字访问必须是8 字节/4 字节对齐.

2. ARM 平台中的字节对齐关键字

(1) __align(num)

(2) __packed

进行一字节对齐。

(3) __unaligned

用于修饰某个变量,可按照非对齐方式访问。

3. __packed 与#pragma pack(1)的区别

4. __attribute__((aligned))

用于指定类型的最低对齐要求.

相关文档
最新文档