在上一篇文章中,小编为您详细介绍了关于《诺基亚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值不值得购买》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器