> 참고: 이 섹션의 할당자에 대한 정보는 네이티브 메모리에만 적용되고 관리되는 힙에는 적용되지 않으며, 이에 대한 내용은 관리되는 메모리 섹션에서 다루고 있습니다. 이 섹션에서는 네이티브 메모리 관리 및 할당자에 대한 일반적인 이해를 갖춘 것으로 가정합니다.
애플리케이션은 메모리 할당자를 사용하여 성능과 사용 가능한 메모리 공간의 균형을 맞춥니다. 애플리케이션에 많은 여유 메모리가 있는 경우 씬과 프레임을 로드할 때 더 빠르고 메모리를 많이 사용하는 할당자를 우선적으로 사용할 수 있습니다. 하지만 애플리케이션에 메모리가 제한되어 있으면 더 느린 할당자를 사용하더라도 효율적으로 메모리를 사용해야 합니다. 다양한 프로젝트에서 최상의 성능을 얻을 수 있도록 Unity의 할당자를 각 애플리케이션의 크기와 요구 사항에 맞게 커스터마이즈할 수 있습니다.
Unity에는 5가지의 할당자 유형이 있습니다. 각 유형은 메모리 블록에 할당을 맞추는 알고리즘이 다르므로 각자 다른 할당에 유용합니다. 할당 간의 중요한 차이점은 대개 지속성이나 할당 수명으로, 이는 할당이 어디로 가야 하는지를 결정합니다. 예를 들어 수명이 긴(지속성) 할당은 힙 및 버킷 할당자로 이동하며, 수명이 짧은 할당은 스레드세이프 리니어 및 TLS 할당자로 이동합니다.
다음 표에는 각 할당자 유형의 알고리즘과 용도가 나와 있습니다.
| 할당자 유형 | 알고리즘 | 용도 |
|---|---|---|
| 동적 힙(Dynamic heap) | 2단계 분리 맞춤(TLSF) | • 메인 할당자 • Gfx 할당자 • Typetree 할당자 • 파일 캐시 할당자 • 프로파일러 할당자 • 에디터 프로파일러 할당자(에디터에만 해당) |
| 버킷(Bucket) | 고정된 크기의 무잠금 할당자 | 다음을 위한 소규모 할당용 공유 할당자 • 메인 할당자 • Gfx 할당자 • Typetree 할당자 • 파일 캐시 할당자 |
| 듀얼 스레드(Dual thread) | 크기와 스레드 ID를 기반으로 할당을 리디렉션합니다. | • 메인 할당자 • Gfx 할당자 • Typetree 할당자 • 파일 캐시 할당자 |
| 스레드 로컬 스토리지(TLS) 스택 | LIFO 스택 | 임시 할당 |
| 스레드세이프 리니어(Threadsafe linear) | 라운드 로빈(Round robin) FIFO | 잡에 데이터를 전달하기 위한 버퍼 |
> 참고: -log-memory-performance-stats 커맨드 라인 인자를 사용한 경우, 이 기술 자료의 예시에서는 플레이어나 에디터를 닫을 때 로그에 기록되는 메모리 사용량 보고서를 사용합니다. 로그 파일을 찾으려면 로그 파일 페이지의 지침을 따르십시오.