Version: 2023.2
언어: 한국어
버킷 할당자
TLS(스레드 로컬 스토리지) 스택 할당자

듀얼 스레드 할당자

듀얼 스레드 할당자는 동적 힙버킷 할당자를 결합한 래퍼입니다. 구체적으로는 다음을 결합합니다.

  • 두 개의 동적 힙 할당자: 메인 스레드에 대한 무잠금 할당자와 다른 모든 스레드가 공유하지만 할당과 할당 해제 시 잠기는 할당자입니다. Unity는 버킷 할당자에 비해 너무 큰 할당에 이 할당자를 사용합니다. 동적 힙 할당자는 메모리 블록을 사용합니다. 할당 크기가 블록의 절반 이상이면 동적 힙 할당자 대신 가상 메모리 시스템으로 이동합니다.
  • 작은 할당을 위한 버킷 할당자. 버킷 할당자가 가득 차면 동적 힙 할당자로 할당이 넘어갑니다.

다음과 같이 두 가지 동적 힙 할당자의 블록 크기를 커스터마이즈할 수 있습니다.

공유 스레드 블록 크기에 대한 커스텀 값이 있는 메인 할당자
공유 스레드 블록 크기에 대한 커스텀 값이 있는 메인 할당자

사용량 보고서는 할당자의 세 부분 모두에 대한 정보를 포함합니다. 예를 들면 다음과 같습니다.

[ALLOC_DEFAULT] Dual Thread Allocator
  Peak main deferred allocation count 135
    [ALLOC_BUCKET]
      Large Block size 4.0 MB
      Used Block count 1
      Peak Allocated bytes 3.3 MB
    [ALLOC_DEFAULT_MAIN]
      Peak usage frame count: [16.0 MB-32.0 MB]: 8283 frames, [32.0 MB-64.0 MB]: 1 frames
      Requested Block Size 16.0 MB
      Peak Block count 2
      Peak Allocated memory 53.3 MB
      Peak Large allocation bytes 40.2 MB
    [ALLOC_DEFAULT_THREAD]
      Peak usage frame count: [64.0 MB-128.0 MB]: 8284 frames
      Requested Block Size 16.0 MB
      Peak Block count 2
      Peak Allocated memory 78.3 MB
      Peak Large allocation bytes 47.3 MB

참고: Peak main deferred allocation count는 삭제 대기열의 항목 수입니다. 메인 스레드는 모든 할당을 삭제해야 합니다. 다른 스레드에서 할당을 삭제하면 해당 할당은 대기열에 추가됩니다. 이 할당은 메인 스레드가 삭제할 때까지 대기열에서 기다립니다. 그런 다음 지연된 할당으로 계산됩니다.

버킷 할당자
TLS(스레드 로컬 스토리지) 스택 할당자