版本:Unity 6 (6000.0)
语言:英语
垃圾回收最佳实践
动态堆分配器

原生内存

注意:本节中关于分配器的信息仅适用于原生内存不适用于托管堆,托管堆在托管内存部分有介绍。本节假设您对原生内存管理和分配器有基本的了解。

应用程序使用内存分配器来平衡性能和可用内存空间。如果应用程序有大量的空闲内存,它可以在加载场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您可以放置环境、障碍物和装饰,本质上是分段设计和构建您的游戏。 更多信息
参见词汇表
和帧时偏向更快的、更占用内存的分配器。但是,如果应用程序的内存有限,它需要有效地使用内存,即使这意味着使用更慢的分配器。为了帮助您为不同的项目获得最佳性能,您可以自定义 Unity 的分配器以适合每个应用程序的大小和要求。

Unity 有五种分配器类型。每种类型都有不同的算法来将分配拟合到内存块中,因此它们对不同的分配很有用。分配之间的重要区别通常是持久性或分配寿命,它决定了分配应该放在哪里。例如,长期(持久)分配进入堆和桶分配器,而短期分配进入线程安全的线性分配器和 TLS 分配器。

此表列出了每种分配器类型的算法和用途

分配器类型 算法 用于
动态堆 两级隔离拟合 (TLSF) • 主分配器
• Gfx 分配器
• Typetree 分配器
• 文件缓存分配器
• 分析器分配器
• 编辑器分析器分配器(仅限编辑器)
固定大小无锁分配器 作为对小型分配的共享分配器

• 主分配器
• Gfx 分配器
• Typetree 分配器
• 文件缓存分配器
双线程 根据大小和线程 ID 重定向分配 • 主分配器
• Gfx 分配器
• Typetree 分配器
• 文件缓存分配器
线程本地存储 (TLS) 堆栈 后进先出 (LIFO) 堆栈 临时分配
线程安全线性 循环轮询先进先出 (FIFO) 用于将数据传递到作业的缓冲区

注意:本文档中的示例使用在您关闭 Player 或编辑器时写入日志的内存使用报告(如果您使用了 -log-memory-performance-stats 命令行参数)。要查找您的日志文件,请按照日志文件页面上的说明进行操作。

垃圾回收最佳实践
动态堆分配器