menu
 
버전
2024.1.4.8780

2024.1.4.8780

2023.1.12.8706

2022.1.18.8567

2021.1.14.8108

2019.2.15.7667

2019.1.11.7296

2018.1.11.6987

2017.2.10.6745

2017.1.9.6501

2016.2.6.6153

2015.1.9.5624


menu_open
경고 : 이 페이지에서 보호된 일부 정보가 표시되지 않았습니다.
특정 플랫폼의 라이선스 사용자일 경우 로그인하셨는지 확인해 주세요.
Wwise SDK 2024.1.4
메모리 매니저

Wwise 사운드 엔진의 모든 모듈은 AK::MemoryMgr 인터페이스를 통해 메모리에 접근합니다. 사운드 엔진의 클라이언트는 이 인터페이스의 초기화와 종료 처리를 해야 합니다.

SDK에 정적 라이브러리(AkMemoryMgr.lib)로 기본 구현이 제공돼있습니다. 이 라이브러리를 사용하려면 클라이언트가 AkModule.h 헤더를 포함하고 AK::MemoryMgr::Init 초기화 함수를 호출해야 합니다.

AkMemoryMgr.lib 와 다른 라이브러리의 사용법에 더 자세한 정보는 빌드 환경 설정 를 참고하세요.

초기화

기본 구현에서 기본 초기화 설정은 AK::MemoryMgr::GetDefaultSettings 를 이용해 구할 수 있습니다.

기본 메모리 할당기 사용하기

기본적으로 모든 메모리는 Wwise에서 내장된 AkMemoryArenas 를 사용하여 할당되며, 각각은 AkMemSettings::memoryArenaSettings 배열을 사용하여 별도로 구성할 수 있습니다. 최대 4개의 AkMemoryArena 를 구성할 수 있습니다.

  • AkMemoryMgrArena_Primary: 대부분의 메모리 카테고리에서 사용되는 기본 AkMemoryArena입니다.
  • AkMemoryMgrArena_Media: 일반적으로 SoundBank를 로딩할 때 Media 메모리 카테고리로 이동하는 메모리 할당에 사용되는 AkMemoryArena입니다.
  • AkMemoryMgrArena_Profiler: Profiler 및 Monitor Queue 메모리 카테고리에 메모리를 할당할 때 사용되는 AkMemoryArena입니다. 이 AkMemoryArena 는 Release 빌드 설정에 존재하지 않습니다.
  • AkMemoryMgrArena_Device: 장치별 메모리 할당을 처리하는 데 사용되는 AkMemoryArena 입니다. 이 문제는 오디오 처리를 위해 장치별 메모리를 사용하는 특정 플랫폼, 즉 AK_DEVICE_MEMORY_SUPPORTED가 정의된 플랫폼에만 나타납니다.

AkMemoryArena 가 필요에 따라 메모리 스팬을 확보하고 해제하는 데 사용되므로, 게임 엔진에 통합하기 위해 각 AkMemoryArena 에 대해 다음 콜백을 구현하는 것이 좋습니다.

  • AkMemoryArenaSettings::fnMemAllocSpan
  • AkMemoryArenaSettings::fnMemFreeSpan

AkMemoryArenaSettings::uMemReservedLimit를 사용하면 각 AkMemoryArena 에서 예약하는 메모리 양의 제한을 설정할 수도 있습니다.

AkMemoryArena 구성에 사용할 수 있는 다른 설정에 대한 자세한 내용은 AkMemoryArenas의 환경 설정 및 튜닝 을 참조하세요.

사용자 정의 메모리 할당자 사용하기

AkMemoryArena 사용을 재정의하고 모든 메모리 할당에 사용자 정의 할당자를 사용하려면 다음 콜백을 모두 재정의합니다.

위의 할당 함수에서 AkMemType_Device 비트가 설정되면 장치 메모리를 반환하여 해당 비트를 지키는 것이 중요합니다.

info참고: 사용자 정의 메모리 할당자를 사용하는 경우 Wwise에서 AkMemoryArenas 프로파일링을 사용할 수 없습니다.

디버깅 환경 설정

다음 설정을 사용해 추가적인 런타임 디버깅 기능을 활성화할 수 있습니다.

이 불분명한 값으로 커스텀 구현하면 원하는 만큼의 메모리 디버깅을 정의할 수 있습니다. 기본 구현에는 두 개의 레벨이 있습니다.

  • 레벨 1은 기본 런타임 메모리 디버깅을 활성화합니다. 여기에는 각 할당의 FILE__과 __LINE 캡처, 각 할당의 호출 스택 추적 (가능한 경우), 정지시 자세한 누수 보고 및 간단한 무결성 확인 같은 것들이 포함됩니다. 레벨 1은 매우 가벼운 편이기 때문에 개발 도중에 기본적으로 실행해도 됩니다.
  • 레벨 2는 스톰프 할당자 사용을 활성화하여, 각각의 할당에 대해 가상 메모리의 별도 페이지를 사용해 범위를 벗어난 쓰기를 찾아냅니다. 이 과정은 매우 더디고 리소스 부족 모드가 될 수 있으므로, 메모리 스톰프의 원인을 추적할 때를 제외하고는 개발 중 기본으로 활성화해두는 것을 권장하지 않습니다.

모든 할당을 파일로 덤프하려면 다음을 사용하세요 (이 때 AkMemSettings::uMemoryDebugLevel 는 1이어야 하며 Release 설정이 아니어야 합니다).

주의: 사운드 엔진은 AK::IAkStreamMgr::CreateStd() 를 이용하는 쓰기를 위해 스트림을 엽니다. Stream Manager의 기본 구현을 사용하고 있다면, Low-Level IO 인터페이스 AK::StreamMgr::IAkLowLevelIOHook::BatchOpen() 의 구현에서 파일 열기가 실행됩니다.

디버깅 목적으로 할당 추적을 수행하려면 다음 설정을 사용합니다 (이 설정은 Release 설정에서는 호출되지 않습니다).

위의 디버그 함수는 할당 함수를 대체하지 않습니다. 이 함수는 다양한 메모리 할당 이벤트에 대한 알림 콜백입니다.

더 자세한 정보는 다음 섹션을 참조하세요.

  • 게임에서 메모리 관리자를 초기화하는 것과 관련된 예제 코드 및 자세한 내용은 예제 를 참조하세요.
  • SoundBank 메모리 사용에 대한 자세한 내용은 뱅크 로딩 을 참조하세요.
  • 메모리 활용 최적화에 대한 자세한 내용은 메모리 활용 최적화 를 참조하세요.

메모리 매니저 오버라이딩

클라이언트가 직접 AK::MemoryMgr 인터페이스를 커스텀 구현할 수 있습니다. AkMemoryMgr.h 에 정의된 모든 함수가 구현돼야 합니다. AkModule.h 에 정의된 AK::MemoryMgr 네임스페이스의 함수는 메모리 관리자의 기본 구현에 대해 만들어졌기 때문에 따로 구현할 필요가 없습니다.

AkMemSettings의 다양한 할당 함수를 재정의할 때와 마찬가지로 새로운 AK::MemoryMgr 구현을 작성할 때는 비트가 설정됐을 때 장치 메모리를 반환하여 AkMemType_Device 비트를 지키도록 주의해야 합니다. 장치 메모리 할당은 일부 플랫폼에서만 사용하며, 특정한 매개 변수를 따릅니다. 자세한 내용은 별도의 플랫폼별 섹션을 참고하세요.


이 페이지가 도움이 되었나요?

지원이 필요하신가요?

질문이 있으신가요? 문제를 겪고 계신가요? 더 많은 정보가 필요하신가요? 저희에게 문의해주시면 도와드리겠습니다!

지원 페이지를 방문해 주세요

작업하는 프로젝트에 대해 알려주세요. 언제든지 도와드릴 준비가 되어 있습니다.

프로젝트를 등록하세요. 아무런 조건이나 의무 사항 없이 빠른 시작을 도와드리겠습니다.

Wwise를 시작해 보세요