# 动态堆分配器

> Inspect the usage reports of the dynamic heap allocator.

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

每个平台都有一个[可以自定义](/engine/6000.0/manual/analysis/performance-memory-overview/native-allocators/memory-allocator-customization.md)的默认内存块大小。分配必须小于半个内存块。对于动态堆分配器而言，不小于半个内存块的分配过大，在这种情况下，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。原本使用类型树和缓存的分配将回退到主分配器。**请注意**，这会带来本机内存碎片增加的风险。请参阅[自定义分配器](/engine/6000.0/manual/analysis/performance-memory-overview/native-allocators/memory-allocator-customization.md)了解如何设置这些内存块大小。
