Version: 2023.2
언어: 한국어
Thread Local Storage (TLS) stack allocator
Customize allocators

Thread-safe linear allocator

The worker threads in Unity use a round robin first in, first out (FIFO) algorithm for fast, lock-free allocations of work buffers for jobs. The jobs dispose of the buffers when done.

이 할당자는 메모리 블록을 할당한 다음 해당 블록 내에서 선형으로 메모리를 할당합니다. 사용 가능한 블록은 풀에 보관됩니다. 한 블록이 가득 차면 할당자는 풀에서 새 블록을 페치합니다. 할당자가 블록의 메모리를 더 이상 필요로 하지 않으면 블록을 비우고 사용 가능한 블록 풀로 반환합니다. 블록을 다시 사용할 수 있도록 빠르게 할당을 지우는 것이 중요하므로 잡은 몇 프레임 이상 할당된 상태를 유지해서는 안 됩니다.

블록 크기를 커스터마이즈할 수 있습니다. 할당자는 필요에 따라 최대 64개의 블록을 할당합니다.

에디터용 Fast Thread Shared Temporary Allocators의 기본값
에디터용 Fast Thread Shared Temporary Allocators의 기본값

모든 블록이 사용 중이거나 할당이 블록에 비해 너무 큰 경우 해당 할당은 잡 할당자보다 훨씬 느린 메인 힙 할당자로 폴백됩니다. 몇 개(프레임에서 1–10개 또는 특히 로드 중에 수백 개)의 오버플로 할당은 가능하지만 모든 프레임에서 오버플로 수가 증가하면 블록 크기를 늘려 폴백 할당을 방지할 수 있습니다. 그러나 씬 로드와 같은 이벤트의 최대 사용량에 맞추기 위해 블록 크기를 너무 많이 늘리면 플레이 동안에 많은 메모리를 사용할 수 없게 될 수 있습니다.

예제:

[ALLOC_TEMP_JOB_4_FRAMES (JobTemp)]
  Initial Block Size 0.5 MB
  Used Block Count 64
  Overflow Count (too large) 0
  Overflow Count (full) 50408

이 예제 사용량 보고서에서 0.5MB의 블록 크기는 너무 작아서 애플리케이션에 필요한 잡 메모리를 수용할 수 없으며 전체 할당자로 인해 대부분의 할당이 오버플로되었습니다.

빌드의 프레임 오버플로가 충분한지 확인하려면 잠시 실행해 본 다음 더 오래 실행하십시오. 오버플로 카운트가 일정하게 유지되면 해당 오버플로는 로드 중에 발생하는 최고점입니다. 실행 시간이 길어질수록 오버플로 카운트가 증가하면 빌드는 프레임당 오버플로를 처리합니다. 두 경우 모두 블록 크기를 늘려 오버플로를 줄일 수 있지만, 로드 중에는 프레임당 오버플로가 오버플로보다 더 중요합니다.

Thread Local Storage (TLS) stack allocator
Customize allocators