Unity 메모리 할당자 커스터마이징 가이드

개요

Unity의 메모리 관리 시스템에서 할당자는 애플리케이션의 성능과 메모리 공간의 효율을 유지하는 중요한 역할을 합니다. 이 문서에서는 메모리 할당자 타입 및 커스터마이징 방법에 대해 설명하고, 각 할당자가 어떻게 작동하는지 이해하는 데 중점을 두겠습니다.


할당자 타입

Unity에는 총 다섯 가지 종류의 할당자가 존재합니다. 각 할당자는 서로 다른 알고리즘을 통해 메모리 블록을 할당하며, 다양한 용도에 맞게 커스터마이즈할 수 있습니다.

할당자 타입 알고리즘 용도
동적 힙 2단계 분리 맞춤(TLSF) 메인 / Gfx 할당자 등
버킷 고정 크기의 무잠금 작은 할당을 위한 공유 할당자
듀얼 스레드 스레드 및 크기 기반 메인 스레드 할당자 및 공유 스레드
스레드 로컬 스토리지 LIFO 스택 임시 할당
스레드세이프 리니어 FIFO 라운드 로빈 짧은 잡 데이터 전달을 위한 버퍼

동적 힙 할당자

동적 힙 할당자는 주로 메인 스레드에서 사용되는 할당자입니다. 이 할당자는 메모리 블록을 사용하며, 할당 크기가 블록의 절반을 초과할 경우 가상 메모리로 이동합니다. 예시: - 최대 사용량: 54.2MB - 할당 블록 크기: 16MB


버킷 할당자

버킷 할당자는 작은 할당을 빠르게 처리하기 위한 할당자입니다. 이 할당자는 매개변수로 설정된 고정 크기의 배수로 할당을 나누어 빠른 속도를 제공합니다. 예시: - 버킷 수: 1024개 (세분화가 16B일 경우)


듀얼 스레드 할당자

듀얼 스레드 할당자는 메인 스레드와 다른 모든 스레드가 사용 가능한 두 가지 동적 힙 할당자를 래핑합니다. 이 할당자는 두 할당자 간의 성능 조절을 지원합니다.


스레드 로컬 스토리지 할당자

스레드 로컬 스토리지(TLS) 할당자는 빠른 임시 할당을 위해 고유한 스택 메모리를 사용합니다. 이 스택 전용 할당자는 임시 데이터에 대해 매우 빠르게 접근할 수 있습니다.


스레드세이프 리니어 할당자

이 할당자는 FIFO 방식을 사용하며, 여러 워커 스레드 간의 짧은 기간 동안의 데이터 할당과 수정을 위해 설계되었습니다.


커스터마이징 방법

Unity에서 할당자 설정을 커스터마이즈하려면 다음 단계를 따르십시오:

  1. Unity 에디터에서 설정 수정하기:
  2. Project Settings > Memory Settings로 이동합니다.
  3. 수정할 값 옆의 잠금 아이콘을 클릭합니다.
  4. 커맨드 라인 인자 사용하기:
  5. 에디터 및 플레이어가 시작할 때 출력되는 할당자 설정 리스트를 확인하여 필요한 파라미터를 찾습니다.
  6. 예: -memorysetup-main-allocator-block-size=<new_value>

메모리 사용량 모니터링

애플리케이션의 메모리 사용량 보고서는 로그 파일에 저장됩니다. 이를 통해 메모리 사용 패턴을 분석하고, 최적의 할당 크기를 설정할 수 있습니다.


결론

Unity의 메모리 할당자를 이해하고 커스터마이징하는 것은 성능 최적화의 핵심입니다. 이 문서를 통해 제공된 정보들을 활용하여 애플리케이션의 메모리 관리 전략을 개선해 보세요.