版本:Unity 6 (6000.0)
语言:英语
双线程分配器
线程安全线性分配器

线程局部存储 (TLS) 栈分配器

每个线程使用其自己的快速栈分配器进行临时分配。这些分配非常快,生命周期小于一帧。分配器使用后进先出 (LIFO) 栈。

临时分配器的默认块大小对于平台为 4MB,对于 Unity 编辑器为 16MB。您可以自定义这些值。

注意:如果分配器使用超过配置的块大小,Unity 会增加块大小。此增加的限制是原始大小的两倍。

Main Thread Block Size custom value in the Fast Per Thread Temporary Allocators
快速每个线程临时分配器中的主线程块大小自定义值

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

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

[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]

在此第二个示例中,工作线程不用于大型临时分配。为了节省内存,您可以将工作线程的块大小减少到 32KB。这在多核机器上特别有用,因为每个工作线程都有自己的栈

[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
双线程分配器
线程安全线性分配器