Unity 메모리 관리자 API 가이드
이 문서는 Unity의 저수준 네이티브 플러그인을 위한 메모리 관리자 API에 대한 정보를 제공합니다. 이 API를 사용하여 메모리 할당, 해제 및 재할당을 효과적으로 관리할 수 있습니다.
주요 개념
IUnityMemoryManager 인터페이스
- 이 인터페이스는 메모리 할당자를 생성하고 관리하는 방법을 제공합니다.
메모리 관리 함수
메모리 관리에 사용되는 주요 함수는 다음과 같습니다.
함수명 | 설명 |
---|---|
CreateAllocator | 메모리를 할당할 수 있는 새 할당자 오브젝트를 생성합니다. |
DestroyAllocator | 기존 할당자 오브젝트를 삭제합니다. |
Allocate | 지정된 할당자를 사용하여 메모리 블록을 할당합니다. |
Deallocate | 지정된 포인터가 가리키는 메모리를 할당 해제합니다. |
Reallocate | 기존 포인터를 다른 메모리 블록을 가리키도록 재할당합니다. |
파라미터 설명
각 메서드에서 사용되는 주요 파라미터는 다음과 같습니다.
파라미터 | 설명 |
---|---|
areaName | 할당자의 범위를 의미하는 문자열 이름입니다. |
objectName | 특정 할당자 이름을 나타내는 문자열입니다. |
allocator | 메모리 할당/해제에 사용할 할당자입니다. |
size | 할당할 메모리 양(바이트 단위)입니다. |
align | 메모리 주소 정렬을 지정합니다. |
file | 소스 파일의 경로를 나타내는 문자열입니다. |
line | 소스 파일 내의 라인 번호를 나타냅니다. |
구현 예제
여기서는 IUnityMemoryManager
인터페이스를 구현하는 예제를 제공합니다:
# include "IUnityInterface.h"
# include "IUnityMemoryManager.h"
# include <cstdint>
static IUnityMemoryManager* s_MemoryManager = NULL;
static UnityAllocator* s_Alloc = NULL;
extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API UnityPluginLoad(IUnityInterfaces * unityInterfaces)
{
s_MemoryManager = unityInterfaces->Get<IUnityMemoryManager>();
if (s_MemoryManager == NULL)
return;
s_Alloc = s_MemoryManager->CreateAllocator("NativePlugins", "Plugin Backend Allocator");
}
extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API UnityPluginUnload()
{
s_MemoryManager->DestroyAllocator(s_Alloc);
s_Alloc = NULL;
s_MemoryManager = NULL;
}
void DoMemoryOperations()
{
void* mem = s_MemoryManager->Allocate(s_Alloc, 1 * 1024, 16, __FILE__, __LINE__);
mem = s_MemoryManager->Reallocate(s_Alloc, mem, 2 * 1024, 16, __FILE__, __LINE__);
s_MemoryManager->Deallocate(s_Alloc, mem, __FILE__, __LINE__);
}
활용 및 응용 예제
- 메모리 풀 관리
- 자주 사용하는 객체를 저장하고 관리하기 위해 메모리 풀을 구현할 수 있습니다.
- 성능 프로파일링
- 할당자 이름을 사용하여 메모리 사용 패턴을 프로파일링하고 최적화할 수 있습니다.
- 게임 성능 최적화
- 동적 메모리 할당을 최소화하여 게임 성능을 향상시킬 수 있습니다.
- 컷씬 시스템에서의 메모리 관리
- 컷씬 진행 중 필요에 따라 메모리를 관리하여, 원활한 사용자 경험을 제공합니다.
결론
Unity의 메모리 관리자 API를 통해 저수준 네이티브 플러그인에서 메모리 관리를 효과적으로 수행할 수 있습니다. 위의 내용을 참고하여 프로젝트에 적합한 메모리 관리 방식을 구현해 보세요.