内存对齐的原因在于,为了访问未对齐的内存,处理器需要作两次内存访问,请问这两次内存访问怎么解释?能够举个具体的例子?
首先,明白基础概念:
内存对齐,通常也称为数据对齐,是计算机对数据类型合法地址做出了一些限制,要求某种类型对象的地址必须是某个值K(通常使2、4或8)的倍数。
其次,理解数据对齐的目的:
这种对齐限制简化了处理器与存储器系统之间接口的硬件设计。
目前,主要软硬件厂商的观点:
无论是否对齐,IA32等硬件都能正常工作,但建议要对齐数据以提高存储器系统的性能。
目前,主流操作系统的的对齐策略:
linux系统2字节数据类型(例如short)的地址必须是2的倍数,而较大的数据类型(例如int、int*、float和double)的地址必须是4的倍数;
windows系统的策略则更严格,任何K字节基本对象的地址都必须是K的倍数,K=2, 4, 8。特别对于一个double或者long long类型数据的地址应该是8的倍数。
最后,给出2个小的示例,假设一个处理器与存储器的接口(数据总线)是8字节(即64位),即处理器每次读取/写入的最小单元是8个字节。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。