为什么内存不对齐需要两次访问内存?
2013-07-28 16:20
260 查看
我们都知道内存对齐可以提高效率,具体来说就是减少内存访问次数。许多计算机系统对基本数据类型合法地址做出了一些限制,要求某种类型对象的地址必须是某个K的倍数。我们将通过图来说明为什么对齐不内存需要两次访问内存:
先来看下图:我们将数据读入到寄存器中,并且假设我们的处理器以四个字节为偏移量访问内存(1-4)四个字节,
显然,我们需要将0-3和4-5都读入到内存中,然后拼成我们想要的四个字节,故需要两次访问,看下图:
上图通过shift拼出我们需要的字节。
参考文章:http://www.ibm.com/developerworks/library/pa-dalign/
先来看下图:我们将数据读入到寄存器中,并且假设我们的处理器以四个字节为偏移量访问内存(1-4)四个字节,
显然,我们需要将0-3和4-5都读入到内存中,然后拼成我们想要的四个字节,故需要两次访问,看下图:
上图通过shift拼出我们需要的字节。
参考文章:http://www.ibm.com/developerworks/library/pa-dalign/
相关文章推荐
- 为什么需要内存对齐?
- 内存对齐时为什么结构体的最终大小需要是其最大成员大小的整数倍
- 8086架构的CPU的内存访问机制以及内存对齐(memory alignment)
- 为什么要进行内存对齐以及对齐规则
- 为什么需要字节对齐?
- 代码中为什么分为代码段、数据段?这和内存访问机制中的段是一回事吗(1)
- 为什么需要字节对齐?
- DLL为什么使用完毕后会提示:内存访问错误呢?
- 为什么新生代内存需要有两个Survivor区
- 为什么要内存对齐 Data alignment: Straighten up and fly right
- 为什么要进行内存对齐以及对齐规则
- 为什么要内存对齐 Data alignment: Straighten up and fly right
- 常见的CPU访问引起的内存保护问题为什么只用event_122上报 - 1
- 【并行计算-CUDA开发】有关CUDA当中global memory如何实现合并访问跟内存对齐相关的问题
- 为什么新生代内存需要有两个Survivor区
- 为什么要内存对齐 Data alignment: Straighten up and fly right
- 为什么需要字节对齐?
- 为什么新生代内存需要有两个Survivor区
- 为什么新生代内存需要有两个Survivor区
- VC中结构体内存分配问题透析(“字节对齐”访问数据)