Chinaunix首页 | 论坛 | 博客
  • 博客访问: 697936
  • 博文数量: 183
  • 博客积分: 2650
  • 博客等级: 少校
  • 技术积分: 1428
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-22 17:02
文章分类
文章存档

2017年(1)

2015年(46)

2014年(4)

2013年(8)

2012年(2)

2011年(27)

2010年(35)

2009年(60)

分类: LINUX

2011-02-18 15:29:15

理论上,数据结构应该按照总线的宽度(32位)进行对齐,数据结构中的各个项对应的地址必须是4字节的倍数,通过加载器将把可执行文件的起始地址放在4的倍数上;
之所以这样设计是因为load/store指令对所有读写的数据只进行一次操作,就可以从内存加载到registrer,或从cpu存贮到内存上, 相反,对应非内存对齐地址,cpu会耗费更多cpu时钟周期;
实际上,这就是一种以空间换时间的做法。


有些架构的cpu甚至不支持非对齐内存访问指令, 如访问地址不是与总线宽度对齐的,cpu就会直接出发一个异常, 像 tilera平台就会触发unaligned fixup handler,  可参考/proc/sys/tile/unaligned_fixups目录下的count(发生次数)、enable(是否支持)、printk(是否打印)

不支持的非对齐内存的cpu还有mips, arm ,sparc,它们在硬件的设计上就强制性的要求对齐
阅读(1168) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~