注意:本节中关于分配器的信息仅适用于原生内存,不适用于托管堆,托管堆在托管内存部分有介绍。本节假设您对原生内存管理和分配器有基本的了解。
应用程序使用内存分配器来平衡性能和可用内存空间。如果应用程序有大量的空闲内存,它可以在加载场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您可以放置环境、障碍物和装饰,本质上是分段设计和构建您的游戏。 更多信息
参见词汇表和帧时偏向更快的、更占用内存的分配器。但是,如果应用程序的内存有限,它需要有效地使用内存,即使这意味着使用更慢的分配器。为了帮助您为不同的项目获得最佳性能,您可以自定义 Unity 的分配器以适合每个应用程序的大小和要求。
Unity 有五种分配器类型。每种类型都有不同的算法来将分配拟合到内存块中,因此它们对不同的分配很有用。分配之间的重要区别通常是持久性或分配寿命,它决定了分配应该放在哪里。例如,长期(持久)分配进入堆和桶分配器,而短期分配进入线程安全的线性分配器和 TLS 分配器。
此表列出了每种分配器类型的算法和用途
分配器类型 | 算法 | 用于 |
---|---|---|
动态堆 | 两级隔离拟合 (TLSF) | • 主分配器 • Gfx 分配器 • Typetree 分配器 • 文件缓存分配器 • 分析器分配器 • 编辑器分析器分配器(仅限编辑器) |
桶 | 固定大小无锁分配器 | 作为对小型分配的共享分配器 • 主分配器 • Gfx 分配器 • Typetree 分配器 • 文件缓存分配器 |
双线程 | 根据大小和线程 ID 重定向分配 | • 主分配器 • Gfx 分配器 • Typetree 分配器 • 文件缓存分配器 |
线程本地存储 (TLS) 堆栈 | 后进先出 (LIFO) 堆栈 | 临时分配 |
线程安全线性 | 循环轮询先进先出 (FIFO) | 用于将数据传递到作业的缓冲区 |
注意:本文档中的示例使用在您关闭 Player 或编辑器时写入日志的内存使用报告(如果您使用了
-log-memory-performance-stats
命令行参数)。要查找您的日志文件,请按照日志文件页面上的说明进行操作。