커스텀 메모리 할당자 【C++】

C++에서는 Live2D가 메모리를 확보하는 방법에 대해 커스터마이징 할 수 있습니다.

LDAllocator클래스를 상속 받아, 각 함수를 오버라이딩한 클래스를 생성에 Live2D를 초기화할 때 전달합니다.

아래와 같이 Live2D를 초기화할 때 메모리 할당자를 지정합니다.
지정하지 않을 경우에는 표준 메모리 할당자 (new, delete)를 사용합니다.
#include "memory/LDAllocator.h"

MyLive2DAllocator myAllocator ;// 커스텀 메모리 할당자
Live2D::init( &myAllocator );

메모리 할당자를 커스터마이징하기 위해서는 아래의 코드를 참고하세요.
/************************************************************
* Live2D용 메모리 할당자
* live2d::LDAllocator의 가상 함수들을 오버라이드한다.
************************************************************/
class MyLive2DAllocator : public live2d::LDAllocator{
public:

MyLive2DAllocator() {
}

virtual ~MyLive2DAllocator() {
}

//---------------------------------------------------------------------------
// 초기화 처리
//
// Live2D::init()이 호출되 때 처리. 필요에 따라 구현하세요.
//---------------------------------------------------------------------------
virtual void init(){ }

//---------------------------------------------------------------------------
// 종료 처리
//
// Live2D::dispose() 맨 마지막에 호출되는 종료 처리. 필요에 따라 구현하세요.
//---------------------------------------------------------------------------
virtual void dispose(){ }


//---------------------------------------------------------------------------
// malloc
//
// ※초기화할 때를 제외하고 어느정도 큰 크기의 메모리가 필요할 때 (1024bytes 이상)되빈다.
//---------------------------------------------------------------------------
virtual void* pageAlloc( unsigned int size , LDAllocator::Type allocType ){
void* ptr ;
switch( allocType ){
case LDAllocator::MAIN: // 일반 메모리
ptr = ::malloc(size) ;
break ;

case LDAllocator::GPU: // GPU에 전달할 정점, 인덱스, UV 버퍼 메모리
ptr = ::malloc(size) ;
break ;

default: // 그외 (추후 추가될 가능성이 있습니다)
ptr = ::malloc(size) ;
break ;
}
return ptr ;
}

//---------------------------------------------------------------------------
// free
//---------------------------------------------------------------------------
virtual void pageFree( void* ptr , LDAllocator::Type allocType ){
::free(ptr);
}

} ;


Comments