【Unity】 WebGL开发中的内存分配问题(分析Unity堆数据)

本文探讨了Unity WebGL开发中内存分配的问题,重点关注Unity堆数据的管理,包括静态内存区域、栈和动态内存的使用,以及未分配内存的分析。
摘要由CSDN通过智能技术生成
对比了WebGL及其它平台内存的工作方式。我们给出的建议是Unity堆应越小越好,同时也强调了一个事实,即浏览器中还存在其他类型的内存开销。

本文将深入探讨Unity堆,并根据实际数据来减少Unity堆的大小,而不再是通过不停地调试和试错来达到这一目的。下面就来看看Unity堆的定义、原理以及如何进行Unity堆内存分析。

Unity堆是什么?

首先要明白,Unity堆和浏览器堆是不同的概念。Unity堆实际上只是浏览器堆中的一块内存。这方面的讲解可在之前的 WebGL内存详解 中查看。

大体上说,所谓堆就是一块用于动态分配的内存,允许应用程序使用malloc/free或new/delete对内存进行操作。

Unity有自己的内存分配系统,以便提高内存的利用率,同时更加方便地进行分析与调试。但在底层仍然使用malloc/free。

在Unity WebGL中,将含有所有运行时Unity引擎对象的这块内存称为Unity堆。Unity堆中的内存分配是通过 dlmalloc 完成的。
在主机平台上,这个堆的大小由硬件规格和操作系统保留内存的大小所决定,因此应用程序应保证其申请的内存不会超过运行时可用内存。
在WebGL平台上同理,我们需要预先定义Unity堆的大小(即在应用程序构造时)。这就是说一旦初始化,Unity堆的大小就不会再发生变化。

Unity堆中有什么?

在Unity WebGL平台中,将Unity堆分配类型分类如下:
  • 静态内存区域
  • 动态内存
  • 未分配内存


142854bftotsf9283ptd3p


被分配的第一块区域用于栈和存放所有静态对象。栈的大小通常是5MB,而静态区域的大小取决于编译的代码,即通常受Unity和工程版本所影响。

上面这些区域分配好之后,剩余的所有内存即可供运行时动态内存分配使用。

当代码开始执行后,动态区域就会占据越来越多的Unity堆空间。如果这片区域占据的空间过多,最终就会导致没有内存可供Unity使用。

142854jjd7fb7ifll2gih3


随着时间的推移,即便会有一些对象被释放或者其他对象的内存再分配,动态内存区的大小是不会减少的,因为没有对应的压
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值