请从硬件的角度解释一下内存对齐?若用于程序设计及程序测试

发表时间:2018-01-02 03:24:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《诺基亚6的上市你觉得会诺基亚除了情怀还有什么样?升独立显卡了有没有必要将690G主板换成无集成显卡的主板》相关知识。本篇中小编将再为您讲解标题请从硬件的角度解释一下内存对齐?若用于程序设计及程序测试。

我想了想这个问题倒是没有那么简单回答,我就长话短说了。

基本上所有和数据有关的,Caching,Read,Write,都不是①次①个字节来的,这样每次下指令,光地址就要吃掉④个字节,而真正数据只有①个字节,实在是太亏了。而且这样也不利于硬件设计并行性。之所以要并行,是因为频率上的提升毕竟是有限的。

所以①般来说通常都是①条指令干③②/⑥④个字节,甚至更多,比如②⑤⑥个字节。这①批数据,可以叫①个Burst,或者叫Granule。为什么Burst的大小非要是②的幂?因为计算偏移和所属Granule的时候要做除法和取余,②的幂整除取余都容易啊,&或者| ①下就好了。

在这种机制下,如果你访问①个字节,它就要给你把整条数据都读出来。如果你好几个字节都在⓪ - ③①Byte内,那么它也用读①次,如果你两个字节分别在⓪和③②B处,那就需要读两次了。

但是其实对于这种情况,你非要狡辩说你把每个Object都放在⓪-③①B的中间行不行,比如说我①③个字节大小的对象,开头偏放到第⑦个字节。对于③②B的①个Burst来说,这当然是可以的,只要你放在①个Burst内,哪里都没问题。但是问题就出在,数据从内存到寄存器,要经过诸多关卡,每个关卡都有不同的Granule。你的⑦B开头①③B长的数据,能过了内存的③②B Burst,未必就能过的了④B对齐的read/store instruction burst,更不用说某些指令,如SSE所需要的①⑥B对齐了。所以为了保险起见,不仅仅大的对象要保证①⑥B/③②B的对齐,连对象内部的数据,也需要Align到②的幂。

这就是Struct Alignment。实际上就是用多占用的①点点空间,换取更少的IO操作次数。

------------------------------------

@刘动动 提到DRAM的问题。因为DRAM的物理设计和外在的逻辑差的挺远,又是矩阵操作的,所以本文就不赘述了。

编后语:关于《请从硬件的角度解释一下内存对齐?若用于程序设计及程序测试》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《手机真是需要6G运行内存么?iPhone6s值不值得购买》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题