Version: 2023.2
言語: 日本語
Dual thread allocator
Thread-safe linear allocator

Thread Local Storage (TLS) stack allocator

Each thread uses its own fast stack allocator for temporary allocations. These allocations are very fast, with a lifespan of less than a frame. The allocator uses a last in, first out (LIFO) stack.

一時アロケーターのデフォルトのブロックサイズは、プラットフォームで 4 MB、Unity エディターで 16 MB です。これらの値はカスタマイズ可能です。

Note: If the allocator use exceeds the configured block size, Unity increases the block size. The limit for this increase is twice the original size.

Fast Per Thread Temporary Allocators の Main Thread Block Size のカスタム値
Fast Per Thread Temporary Allocators の Main Thread Block Size のカスタム値

If a thread’s stack allocator is full, allocations fall back to the threadsafe linear allocator. A few overflow allocations are fine: 1 to 10 in a frame, or a few hundred during load. However, if the numbers grow on every frame, you can increase the block sizes.

使用量レポートの情報は、アプリケーションに適したブロックサイズを選択するにあたって役立ちます。例えば、以下のメインスレッドの使用量レポートでは、ロードのピークは 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]

この 2 番目の例では、ワーカースレッドは大きな一時割り当てには使用されていません。メモリを節約するために、ワーカーのブロックサイズを 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
Dual thread allocator
Thread-safe linear allocator