Version: Unity 6.0 (6000.0)
语言 : 中文
存储桶分配器
线程安全线性分配器

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

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

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

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

Fast Per Thread 临时分配器中的主线程内存块大小自定义值
Fast Per Thread 临时分配器中的主线程内存块大小自定义值

如果线程的堆栈分配器已满,分配将回退到线程安全线性分配器。少量溢出分配可以接受:一帧中 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
存储桶分配器
线程安全线性分配器