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.
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