ランタイム
Memory

メモリの割り当て

  • メモリを確保
    • MIX_MALLOC
      サイズ( バイト単位 )を指定してメモリを確保します。
    • MIX_MALLOC_T
      型と要素の数を指定して、メモリを確保します。
    • MIX_ALIGNED_MALLOC
      アラインメント、サイズ( バイト単位 )を指定してメモリを確保します。
    • MIX_ALIGNED_MALLOC_T
      アラインメント、型、要素の数を指定してメモリを確保します。

  • メモリを再確保
    • MIX_REALLOC
      再確保したいバッファのメモリのポインタ、サイズ( バイト単位 )を指定してメモリを再確保します。
    • MIX_REALLOC_T
      再確保したいバッファのメモリのポインタ、型、要素の数を指定してメモリを再確保します。

  • メモリを解放
    • MIX_FREE
UInt8* pBuff = NULL;
UInt8* pTemp = NULL;
// 通常のメモリの確保、解放
pBuff = ( UInt8* )MIX_MALLOC( sizeof( UInt8 ) * 32 );
MIX_FREE( pBuff );
// アラインメントを指定したメモリの確保、解放
pBuff = ( UInt8* )MIX_ALIGNED_MALLOC( 16, sizeof( UInt8 ) * 32 );
MIX_FREE( pBuff );
// 型を指定したメモリの確保、解放
pBuff = MIX_MALLOC_T( UInt8, 32 );
MIX_FREE( pBuff );
// アラインメント、型を指定したメモリの確保、解放
pBuff = MIX_ALIGNED_MALLOC_T( 16, UInt8, 32 );
MIX_FREE( pBuff );
// メモリの再確保
pBuff = MIX_MALLOC_T( UInt8, 32 );
pTemp = MIX_REALLOC_T( pBuff, UInt8, 64 );
MIX_ASSERT( pTemp != NULL );
pBuff = pTemp;
MIX_FREE( pBuff );

クラスのインスタンス化

  • クラスのインスタンスを作成
    • MIX_NEW_T
      型、コンストラクタの引数を指定してクラスのインスタンスを作成します。
    • MIX_ALIGNED_NEW_T
      アラインメント、型、コンストラクタの引数を指定してクラスのインスタンスを作成します。
  • クラスのインスタンスを解放
    • MIX_DELETE_T
      型を指定してクラスのインスタンスを解放します。
    • MIX_DELETE_THIS_T
      型を指定してクラスの自インスタンスを解放します。( delete this )
  • クラスのインスタンス配列を作成
    • MIX_NEW_ARRAY_T
      型を指定してクラスのインスタンス配列を作成します。
    • MIX_ALIGNED_NEW_ARRAY_T
      アラインメント、型を指定してクラスのインスタンス配列を作成します。
  • クラスのインスタンス配列を解放
    • MIX_DELETE_ARRAY_T
      型を指定してクラスのインスタンス配列を解放します。
    • MIX_DELETE_PTR_ARRAY_T
      型を指定してクラスのインスタンスのポインタ配列を解放します。

これらのマクロを使用するには、クラスに MIX_DECLARE_ALLOCATOR を記述する必要があります。

class Hoge
{
public:
public:
Hoge( void );
~Hoge( void );
};
Hoge* pHoge = NULL;
Hoge* pHogeArray = NULL;
Hoge* pHogePtrArray = NULL;
// 通常のインスタンスの作成、解放
pHoge = MIX_NEW_T( Hoge );
MIX_DELETE_T( Hoge, pHoge );
// アラインメントを指定したインスタンスの作成、解放
pHoge = MIX_ALIGNED_NEW_T( 16, Hoge );
MIX_DELETE_T( Hoge, pHoge );
// 通常のインスタンス配列の作成、解放
pHogeArray = MIX_NEW_ARRAY_T( Hoge, 8 );
MIX_DELETE_ARRAY_T( Hoge, pHogeArray );
// アラインメントを指定したのインスタンス配列の作成、解放
pHogeArray = MIX_ALIGNED_NEW_ARRAY_T( 16, Hoge, 8 );
MIX_DELETE_ARRAY_T( Hoge, pHogeArray );
// インスタンスポインタ配列の作成、解放
pHogePtrArray = MIX_NEW_ARRAY_T( Hoge*, 8 );
MIX_DELETE_PTR_ARRAY_T( Hoge, pHogePtrArray );

また、通常は使用しませんが、何かしらの理由で Windows 標準のメモリアロケータを使用したい場合は、以下のマクロを使用してください。

  • インスタンスの作成
    • MIX_NEW ( new )
  • インスタンスの破棄
    • MIX_DELETE ( delete )
    • MIX_DELETE_THIS ( delete this )
    • MIX_DELETE_ARRAY ( delete [] )