Version: Unity 6.0 (6000.0)
语言 : 中文
双线程分配器
存储桶分配器

动态堆分配器

动态堆分配器是主堆分配器。它将算法 Two Level Segregated Fit (TLSF) 应用于内存块。

每个平台都有一个可以自定义的默认内存块大小。分配必须小于半个内存块。对于动态堆分配器而言,不小于半个内存块的分配过大,在这种情况下,Unity 会改用虚拟内存 API 进行分配。

动态堆分配器的使用情况报告示例:

[ALLOC_DEFAULT_MAIN]
Peak usage frame count: [16.0 MB-32.0 MB]: 497 frames, [32.0 MB-64.0 MB]: 1 frames
Requested Block Size 16.0 MB
Peak Block count 2
Peak Allocated memory 54.2 MB
Peak Large allocation bytes 40.2 MB

在此示例中,TLSF 内存块大小设置为 16 MB,Unity 已分配两个内存块。分配器的峰值使用量为 54.2MB。在这 52.4MB 中,40.2MB 未分配在 TLSF 内存块中,而是回退到虚拟内存。大多数帧都具有 16–32MB 的已分配内存,而一个帧(可能是加载帧)的峰值内存为 32–64MB。

如果增大了内存块大小,则大型分配将保留在动态堆中,而不是回退到虚拟内存。但是,该内存块大小可能因内存块未得到充分利用而导致内存浪费。

提示:类型树和文件缓存分配器使用动态堆分配。要保存它们在该算法下使用的内存块,可将类型树内存块大小和文件缓存内存块大小设置为 0。原本使用类型树和缓存的分配将回退到主分配器。请注意,这会带来本机内存碎片增加的风险。请参阅自定义分配器了解如何设置这些内存块大小。

双线程分配器
存储桶分配器