版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
影响内存访问速度的因素主要有:内存带宽:每秒读写内存的数据量,由硬件配置决定。高速缓冲:与内存之间的缓冲器,当命中率比较高时能大大提供内存平均访问速度。转换旁视缓冲:系统虚拟地址向物理地址转换的高速查表机制,转换速度比普通转换机制要快。我们能够优化的只有第点和第点。由于的小容量与的同步竞争,如何最大限度的利用高速缓冲就是我们的明确优化突破口(以常用的数据结构体为例):压缩结构体大小:针对的小容量。对结构体进行对齐:针对内存地址读写特性与上的同步竞争。申请地址连续的内存空间:针对的小容量和命中。4内其它优化:综合考虑多种因素具体优化方法1内压缩结构体大小系统是有限的,并且容量很小,充分压缩结构体大小,使得能缓存更多的被访问数据,无非是提高内存平均访问速度的有效方法之一。压缩结构体大小除了需要我们对应用逻辑做好更合理的设计,尽量去除不必要的字段,还有一些额外针对结构体本身的压缩方法。1内对1结内构体字段进行合理的排列由于结构体自身对齐的特性,具有同样字段的结构体,不同的字段排列顺序会产生不同大小的结构体。大小:12字节大小:8字节1.2利.用位域实际中,有些结构体字段并不需要那么大的存储空间,比如表示真假标记的字段只取两个值之一,或1此时用个位即可,如果使用类型的单一字段就大大的浪费了空间。示例:利用结构体也是压缩结构体大小的方法之一,它允许我们在某些情况下能对结构体的多个字段进行合并或把小字节字段存放到大字节字段内。示例:2.对结构体进行对齐对结构体进行对齐有两层意思,一是指对较小结构体进行机器字对齐,二是指对较大结构体进行对齐。2.1对.较小结构体进行机器字对齐我们知道,对于现代计算机硬件来说,内存只能通过特定的对齐地址(比如按照机器字)进行访问。举个例子来说,比如在64位的机器上,不管我们是要读取第0个字节还是要读取第1个字节,在硬件上传输的信号都是一样的。因为它都会把地址到地址7这个字节全部读到。只是当我们是需要读取第个字节时,丢掉后面7个字节,当我们是需要读取第1个字节,丢掉第1个和后面6个字节。当我们要读取的字节刚好落在两个机器字内时,就出现两次访问内存的情况,同时通过一些逻辑计算才能得到最终的结果。因此,为了更好的提升性能,我们须尽量将结构体做到机器字(或倍数)对齐,而结构体中一些频繁访问的字段也尽量安排在机器字对齐的位置。大小:12字节大小:16字节上面表格右边的结构体,通过增加一个填充字段将结构体大小增加到字节,从而与机器字倍数对齐,这在我们申请连续的结构体数组时,仍能保证数组内的每一个结构体都与机器字倍数对齐。通过填充字段使得结构体大小与机器字倍数对齐是一种常见的做法,在内核源码里随处可见。对较大结构体进行对齐我们知道,与内存交换的最小单位为,一个大小以64字节为例。当我们的结构体大小没有与64字节对齐时,一个结构体可能就要占用比原本需要更多的。比如,把一个内存中没有字节长的结构体缓存到时,即使该结构体本身长度或许没有还没有字节,但由于其前后搭占在两条上,那么对其进行淘汰时就会淘汰出去两条。这还不是最严重的问题,非对齐结构体在机器上容易引发名为错误共享的问题。比如,结构体和都没做对齐,如果它们(后半部和前半部)在机器上合占了同一条,如果对结构体后半部做了修改则将导致的失效,同样,如果对结构体前半部做了修改则也将导致的失效。如果和反复做相应的修改则导致的不良结果显而易见。本来逻辑上没有共享的结构体和,实际上却共享了1这就是所谓的错误共享。源码里提供了利用的扩展属性定义的宏来做这种对齐处理,在文件内可以找到多个相类似的宏,比如:该宏可以用来修饰结构体字段,作用是强制该字段地址与映射起始地址对齐。看内结构体的实现,三个修饰字段,表示强制这些字段与映射起始地址对齐。字4节空洞4字0节空洞2字0节空洞回到前面的问题,如果我们对结构体的第一个字段加上修饰,则该错误共享即可解决。2.3只.读字段和读写字段隔离对齐只读字段和读写字段隔离对齐的目的就是为了尽量保证那些只读字段和读写字段分别集中在的不同中。由于只读字段几乎不需要进行更新,因而能在中得以稳定的缓存,减少由于混合有读写字段导致的对应的频繁失效问题,以便提高效率;而读写字段相对集中在一起,这样也能保证当程序读写结构体时,污染的条数也就相对的较少。3.申请地址连续的内存空间随着地址空间由32位转到64位,页内存管理的目录分级也越来越多,4级的目录地址转换也是一笔不小是开销。硬件产商为我们提供了缓冲,加速虚拟地址到物理地址的换算。但是,毕竟是有限,对地址连续的内存空间进行访问时,能得到更多的命中,同时高速缓冲命中的几率也更大。两段代码,实现同一功能,但第一种方法在实际使用中,内存读写效率就会相对较好,特别是在申请的内存很大时(未考虑异常):方法一:方法二:另外,如果我们使用更大页面(比如或)的分页机制,同样能够提升性能;因为相比于原本每页大小的分页机制,应用程序申请同样大小的内存,大页面分页机制需要的页面数目更少,从而占用的项目也更少,减少虚拟地址到物理地址的转换次数的同时,提高的命中率,缩短每次转换所需要的时间。因为大多数操作系统在分配内存时候都需要按页对齐,所以大页面分页机制的缺点就是内存浪费相对比较严重。只有在物理内存足够充足的情况下,大页面分页机制才能够体现出优势。4.其它优化预.读指令读内存提前预取内存中数据到内,提高的命中率,加速内存读取速度,这是设计预读指令的主要目的。如果当前运算复杂度比较高,那么预取和运算就可
忽略,而且就算预取一段错误的
预取指令,因为它不会污染忽略,而且就算预取一段错误的
预取指令,因为它不会污染的第一条,而另外地址也不会导致异常。一般使用C它把每次取得的数据都存放到几条指令会替换中最近最少使用的4.2非.暂时移动指令写内存我们知道为了保证与内存之间的数据一致性,对的写操作主要有两种方式同步到内存,写透式()和写回式(-b不管哪种同步方式都是要消耗性能的,而在某些情况下,写是不必要的:有哪些情况不需要写呢?比如做数据拷贝(高效函数实现)时,或者我们已经知道写的数据在最近一段时间内(或者永远)都不会再使用了,那么此时就可以不用写,让对应的自动失效,以便缓存其它数据。这在某些特殊场景非常有用,相应的汇编指令有、、、、、、。完整的利用预读指令和非暂时移动指令实现的高速内存拷贝函数:总结要高效的访问内存,必须充分利用系统的缓存功能,因为就目前来说,的访问速度比内存快太多了。具体优化方法有:1.用设计上压缩结构体大小。2.结构体尽量做到机器字(倍数)对齐。3.结构体中频繁访问的字段尽量放在机器字对齐的位置。4.频繁读写的多个结构体变量尽量同时申请,使得它们尽可能的分布在较小的线性空间范围内,这样可利用缓
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026-2027学年江苏省宿迁市高考物理倒计时模拟卷(含答案解析)
- 笃行致远逐梦-2026年秋季高三开学第一课
- 工厂流水线组长2026年上半年班组生产工作总结
- 2026 年医务科行政上半年工作总结
- 2026年秋季高中新生军训 现代国防与国家安全教学方案
- 2026年秋季高中开学第一课 自律自强与独立成长主题班会
- 2026年北师大版小学六年级语文上册《红楼梦》完整教案
- 胃肠息肉的内镜治疗
- 急诊科院前急救护理
- II账项调整与财务报表:案例分析
- 2026湖北恩施州来凤县面向县外在职在编教师选聘30人考前冲刺试卷附参考答案详解【研优卷】
- 2025福建福州港务集团有限公司春季校园招聘11人笔试历年参考题库附带答案详解
- 泰州市华荣麦芽有限公司十二万吨麦芽扩建项目环评资料环境影响
- 医院消防经费管理制度
- 《鞍钢敏捷生产案例》课件
- 应急预案培训计划
- 护理管理中的9S管理
- 技术研发部工作职责管理制度
- 工程造价预算编制服务方案
- 《如何做一名好教师》课件
- 定向减资协议
评论
0/150
提交评论