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

> Inspect the usage reports of the TLS stack allocator allocator.

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

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

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


**Fast Per Thread 临时分配器中的主线程内存块大小自定义值:**
![](/api/media?file=/engine/6000.0/media/images/Per_Thread.png)

如果线程的堆栈分配器已满，分配将回退到[线程安全线性分配器](/engine/6000.0/manual/analysis/performance-memory-overview/native-allocators/threadsafe-linear-allocator.md)。少量溢出分配可以接受：一帧中 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
```
