字节对齐访问

ü字节对齐定义

指令对操作数起始地址有特定的要求:

1)单字节对齐:单字节类型数据,可从任意地址取操作数

2)2字节对齐:2字节类型数据,希望从偶地址开始取操作数

3)4字节对齐:4字节类型数据,希望从能被4整除的地址开始取操作数

  

符合上面要求的,称为对齐的存储访问,访问结果正确;

反之称为非对齐的访问,访问结果将因CPU类型而异.

 

ü字节对齐要求与CPU的架构类型紧密相关
PowerPCX86 :硬件处理

1)对齐没有特殊要求,无论字节对齐与否,数据读取都不会异常

2)在非四字节对齐情况下,数据读取由CPU自动完成多次操作,处理效率会略微下降,对上层应用透明

MIPSARM :软件处理

1) 对基本数据类型强制要求对齐访问,否则出错

2) 对于数据结构非对齐内存访问可能会异常。可以通过编译选项(如-funaligned-pointers)等软件方法进行处理

 

ü字节对齐要求与编译环境也紧密相关

 

ANSI C对于字节对齐方式没有规定,为编译器实现时提供了灵活性
对于不对齐的结构类型,不同编译器分配空间,对齐方式可能不一样

1

#pragma pack(4)

typedef   struct

{

    UINT16 usT1;

    UINT8  ucT2;

    UINT8  ucT3;

    UINT8  ucT4;

}TEST_STRU;

#pragma pack(0)

IXP2350Tornado编译器分配6字节,Intel 80X86VC编译器上分配8字节。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值