Version: 6000.3
语言: 中文
存储桶分配器示例
线程安全线性分配器示例

线程本地存储堆栈分配器示例

先决条件

这些示例使用了 Unity 在您关闭播放器或 Unity 编辑器时写入日志的内存使用情况报告。要创建这些报告,请使用-log-memory-performance-stats命令行参数。要查找项目的日志文件,请按照日志文件页面上的说明进行作。

TLS 堆栈分配器使用情况报告

如果线程的堆栈分配器已满,则分配将回退到线程安全线性分配器。一些溢出分配是可以的:在一个帧中 1 到 10 个,或者在加载期间几百个。但是,如果数字每帧都在增长,则可以增加块大小。

“每线程快速”临时分配器中的“主线程块大小”自定义值
“每线程快速”临时分配器中的“主线程块大小”自定义值

要增加块大小,请在编辑器中设置值,或使用命令行参数。有关更多信息,请参阅自定义本机内存分配器

使用情况报告中的信息可以帮助您选择适合应用程序的块大小。例如,在以下主线程使用情况报告中,负载峰值为 2.7 MB,但其余帧低于 64 KB。您可以将块大小从 4 MB 减少到 64 KB,并允许加载帧溢出到分配上:

[ALLOC_TEMP_TLS] TLS Allocator
  StackAllocators :
    [ALLOC_TEMP_MAIN]
      Peak usage frame count: [16.0 KB-32.0 KB]: 802 frames, [32.0 KB-64.0 KB]: 424 frames, [2.0 MB-4.0 MB]: 1 frames
      Initial Block Size 4.0 MB
      Current Block Size 4.0 MB
      Peak Allocated Bytes 2.7 MB
      Overflow Count 0
    [ALLOC_TEMP_Job.Worker 18]

在以下示例中,工作线程不用于大型临时分配。为了节省内存,您可以将工作程序的块大小减小到 32 KB。这在多核计算机上很有用,其中每个工作线程都有自己的堆栈:

[ALLOC_TEMP_Job.Worker 14]
      Initial Block Size 256.0 KB
      Current Block Size 256.0 KB
      Peak Allocated Bytes 18.6 KB
      Overflow Count 0

其他资源

存储桶分配器示例
线程安全线性分配器示例