当前位置:文档之家› ARM中的对齐问题

ARM中的对齐问题

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))
用于指定类型的最低对齐要求.。

相关主题