Unity 메모리 할당자 커스터마이징 가이드
개요
Unity의 메모리 관리 시스템에서 할당자는 애플리케이션의 성능과 메모리 공간의 효율을 유지하는 중요한 역할을 합니다. 이 문서에서는 메모리 할당자 타입 및 커스터마이징 방법에 대해 설명하고, 각 할당자가 어떻게 작동하는지 이해하는 데 중점을 두겠습니다.
할당자 타입
Unity에는 총 다섯 가지 종류의 할당자가 존재합니다. 각 할당자는 서로 다른 알고리즘을 통해 메모리 블록을 할당하며, 다양한 용도에 맞게 커스터마이즈할 수 있습니다.
할당자 타입 | 알고리즘 | 용도 |
---|---|---|
동적 힙 | 2단계 분리 맞춤(TLSF) | 메인 / Gfx 할당자 등 |
버킷 | 고정 크기의 무잠금 | 작은 할당을 위한 공유 할당자 |
듀얼 스레드 | 스레드 및 크기 기반 | 메인 스레드 할당자 및 공유 스레드 |
스레드 로컬 스토리지 | LIFO 스택 | 임시 할당 |
스레드세이프 리니어 | FIFO 라운드 로빈 | 짧은 잡 데이터 전달을 위한 버퍼 |
동적 힙 할당자
동적 힙 할당자는 주로 메인 스레드에서 사용되는 할당자입니다. 이 할당자는 메모리 블록을 사용하며, 할당 크기가 블록의 절반을 초과할 경우 가상 메모리로 이동합니다. 예시: - 최대 사용량: 54.2MB - 할당 블록 크기: 16MB
버킷 할당자
버킷 할당자는 작은 할당을 빠르게 처리하기 위한 할당자입니다. 이 할당자는 매개변수로 설정된 고정 크기의 배수로 할당을 나누어 빠른 속도를 제공합니다. 예시: - 버킷 수: 1024개 (세분화가 16B일 경우)
듀얼 스레드 할당자
듀얼 스레드 할당자는 메인 스레드와 다른 모든 스레드가 사용 가능한 두 가지 동적 힙 할당자를 래핑합니다. 이 할당자는 두 할당자 간의 성능 조절을 지원합니다.
스레드 로컬 스토리지 할당자
스레드 로컬 스토리지(TLS) 할당자는 빠른 임시 할당을 위해 고유한 스택 메모리를 사용합니다. 이 스택 전용 할당자는 임시 데이터에 대해 매우 빠르게 접근할 수 있습니다.
스레드세이프 리니어 할당자
이 할당자는 FIFO 방식을 사용하며, 여러 워커 스레드 간의 짧은 기간 동안의 데이터 할당과 수정을 위해 설계되었습니다.
커스터마이징 방법
Unity에서 할당자 설정을 커스터마이즈하려면 다음 단계를 따르십시오:
- Unity 에디터에서 설정 수정하기:
Project Settings > Memory Settings
로 이동합니다.- 수정할 값 옆의 잠금 아이콘을 클릭합니다.
- 커맨드 라인 인자 사용하기:
- 에디터 및 플레이어가 시작할 때 출력되는 할당자 설정 리스트를 확인하여 필요한 파라미터를 찾습니다.
- 예:
-memorysetup-main-allocator-block-size=<new_value>
메모리 사용량 모니터링
애플리케이션의 메모리 사용량 보고서는 로그 파일
에 저장됩니다. 이를 통해 메모리 사용 패턴을 분석하고, 최적의 할당 크기를 설정할 수 있습니다.
결론
Unity의 메모리 할당자를 이해하고 커스터마이징하는 것은 성능 최적화의 핵심입니다. 이 문서를 통해 제공된 정보들을 활용하여 애플리케이션의 메모리 관리 전략을 개선해 보세요.