自訂記憶體配置【C++】

在C++的環境下可以自訂如何節省記憶體。

承繼LDAllocator class,將於初始化時提交覆寫(override)各函數的記憶體。

請如下例於Live2D初始化時指定記憶體配置。
如無指定時將使用標準的配置(new,delete等)
#include "memory/LDAllocator.h"

MyLive2DAllocator myAllocator ;// 自訂記憶體配置
Live2D::init( &myAllocator );

欲自訂配置請參考以下的程式碼
/************************************************************
* 自訂Live2D節省記憶體命令
* live2d::LDAllocator假設覆寫(override)函式
************************************************************/
class MyLive2DAllocator : public live2d::LDAllocator{
public:

MyLive2DAllocator() {
}

virtual ~MyLive2DAllocator() {
}

//---------------------------------------------------------------------------
// 初始化處理
//
// 由Live2D::init()呼叫初始化處理。回應其需求進行初始化處理。
//---------------------------------------------------------------------------
virtual void init(){ }

//---------------------------------------------------------------------------
// 處理結束
//
// 於Live2D::dispose()的最後呼叫初始化處理。回應其需求進行初始化處理。
//---------------------------------------------------------------------------
virtual void dispose(){ }


//---------------------------------------------------------------------------
// malloc
//
// ※進行初始化以外,使用記憶體達某種程度時呼叫。
//---------------------------------------------------------------------------
virtual void* pageAlloc( unsigned int size , LDAllocator::Type allocType ){
void* ptr ;
switch( allocType ){
case LDAllocator::MAIN: //通常的記憶體
ptr = ::malloc(size) ;
break ;

case LDAllocator::GPU: //提交GPU的頂點、index、UV
ptr = ::malloc(size) ;
break ;

default: //其他(以後尚有可能追加)
ptr = ::malloc(size) ;
break ;
}
return ptr ;
}

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

} ;


コメント