返回「计算机、信息技术与工程」

【内存】内存底层深入

【内存】内存底层深入 创建时间:2021/7/2 12:59

更多
Markdown 结构化数据
本文目录 7 个章节

【内存】内存底层深入

创建时间:2021/7/2 12:59

【内存】内存底层深入

  • 【内存】内存底层深入
    • 基本知识
      • 物理内存的访问
      • 台式设备和移动设备内存架构差异
    • 内存分页
    • Unity
    • Ref

基本知识

物理内存的访问

CPU访问内存是一个慢速过程。 访问过程:先访问Cache,Cache包含L1,L2,L3,也就是一级缓存,二级缓存和三级缓存,若在这些缓存里全没找到我们要的数据,再去访问内存,接着会把找到的数据存放到Cache中,完成一次操作。

过多的Cache Miss就会导致大量的内存和Cache的IO交换,浪费大量时间。

Unity ECS方案: 可以将存储在内存中的不连续数据,变为连续的数据,从而降低Cache Miss的概率。

台式设备和移动设备内存架构差异

  • 移动设备 没有独立显卡

  • 移动设备 没有独立显存 ,内存和显存是同一块内存。

所以有可能我们游戏占用的内存并不大,但是依旧爆内存了,其实是因为显存分配不出来了。这种情况,我们可以去查看一下Log,例如Android会有一个 OpenGL Error:Out Of Memory。

  • 移动设备的CPU面积更小,因此会导致 缓存级数更少 ,大小也更小,例如一般的台式机三级缓存可能有8-16M,而移动设备则只有2M左右。

内存分页

内存分页(IOS上大部分为16K/page)是内存管理的最小单位,当Unity需要申请内存的时候,都会以block的方式(若干个页)进行申请。如果某一页在若干次GC(IOS为8次)之后仍然为Empty的话,它就会被释放,实际的物理内存就会被还给物理内存。

Unity

Ref

https://zhuanlan.zhihu.com/p/370467923 https://zhuanlan.zhihu.com/p/362941227