找回密码
 立即注册
查看: 2993|回复: 81

[游戏引擎技术] Unity3D游戏开发使用的三种内存

[复制链接]
发表于 2015-12-23 16:35 | 显示全部楼层 |阅读模式
  实际上,Unity3D游戏开发使用的内存一共有三种:程序代码、托管堆(Managed Heap)以及本机堆(Native Heap)。

  程序代码:包括了所有的Unity3D游戏开发引擎,使用的库,以及你所写的所有的游戏代码。在编译后,得到的运行文件将会被加载到设备中执行,并占用一定内存。这部分内存实际上是没有办法去“管理”的,它们将在内存中从一开始到最后一直存在。一个空的Unity3D游戏开发默认场景,什么代码都不放,在iOS设备上占用内存应该在17MB左右,而加上一些自己的代码很容易就飙到20MB左右。想要减少这部分内存的使用,能做的就是减少使用的库,稍后再说。

  托管堆:是被Mono使用的一部分内存。Mono项目一个开源的.net框架的一种实现,对于Unity3D游戏开发,其实充当了基本类库的角色。托管堆用来存放类的实例(比如用new生成的列表,实例中的各种声明的变量等)。

  “托管”的意思是Mono“应该”自动地改变堆的大小来适应你所需要的内存,并且定时地使用垃圾回收(Garbage Collect)来释放已经不需要的内存。关键在于,有时候你会忘记清除对已经不需要再使用的内存的引用,从而导致Mono认为这块内存一直有用,而无法回收。

  本机堆:是Unity3D游戏开发引擎进行申请和操作的地方,比如贴图,音效,关卡数据等。Unity3D使用了自己的一套内存管理机制来使这块内存具有和托管堆类似的功能。基本理念是,如果在这个关卡里需要某个资源,那么在需要时就加载,之后在没有任何引用时进行卸载。

  听起来很美好也和托管堆一样,但是由于Unity3D有一套自动加载和卸载资源的机制,让两者变得差别很大。自动加载资源可以为开发者省不少事儿,但是同时也意味着开发者失去了手动管理所有加载资源的权力,这非常容易导致大量的内存占用(贴图什么的你懂的),也是Unity3D给人留下“吃内存”印象的罪魁祸首。

 楼主| 发表于 2015-12-23 16:39 | 显示全部楼层
观看教程,可以直接上官网哦!http://www.newbieol.com/
发表于 2017-2-27 11:17 | 显示全部楼层
很不错
发表于 2017-2-27 11:22 | 显示全部楼层
好帖就是要顶
发表于 2017-2-27 11:59 | 显示全部楼层
顶顶多好
发表于 2017-2-27 11:10 | 显示全部楼层
真心顶
发表于 2017-2-27 11:43 | 显示全部楼层
很好哦
发表于 2017-3-29 10:14 | 显示全部楼层
楼主是超人
发表于 2017-3-29 10:07 | 显示全部楼层
好帖就是要顶
发表于 2017-3-29 10:03 | 显示全部楼层
顶顶多好
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-22 00:36 , Processed in 0.173243 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表