版本:Unity 6 (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.2 MB。在这 52.4 MB 中,40.2 MB 未在 TLSF 块中分配,而是回退到虚拟内存。大多数帧分配了 16-32 MB 内存,而一帧(可能是加载帧)的内存峰值为 32-64 MB。

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

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

本机内存
桶分配器