##### Shinobi Library - メモリマネージメント関数

# syMallocMultiChangeIF

サブヒープに対するインタフェースの置換え

### 書式

> `SYS_MALCM_IF *syMallocMultiChangeIF( heaph, mallocIF )
> SYS_MALCM_HEAPH *heaph
> SYS_MALCM_IF *mallocIF
> `

### 引数

> heaph | (出力)ヒープハンドル
> mallocIF | 新しいインタフェース

### 戻り値

> 入れ替える前のインタフェースへのポインタ

### 解説

> この関数は、引数heaph で示されるサブヒープ領域の malloc()関連関数をユーザ定義のものに置き換えます。

> この関数の実行によって、他のサブヒープに対するインタフェースは影響を受けません。

> 登録するインタフェースは、引数mallocIF によって渡しますが、引数mallocIF の指す実体は、インタフェースの各関数にディスパッチするときに内部で直接使用されるため、当該のインタフェースを使う間は消滅しないようにする必要があります。

> 引数mallocIF の示すインタフェースの各関数を実装する際には、第一引数で渡される heaph が指す内容を利用して、どのサブヒープから領域を確保するかを判断する必要があります。 この際に heaph->Start, heaph->Size がサブヒープの領域を示すので、登録されるインタフェースの各関数はそれらを判断するか、heaph のアドレスによってどのサブヒープから領域を確保するかを判断する必要があります。

### 用例

>     Sint8 myHeap[1024];
>     SYS_MALCM_HEAPH myHeaph;
>     STRUCT_FOO *foo;
>     Uint32 wholeSize, bigSize;
>     extern const SYS_MALCM_IF myMallocIF;

>     syMallocMultiCreateHeap(&myHeaph, myHeap, 1024);
>     syMallocChangeIF(&myHeaph, &myMallocIF);
>     if((foo = syCallocMulti(&myHeaph, sizeof(STRUCT_FOO), 3)) == NULL){
>     	/* Could not allocate the memory */
>     	myError();
>     } else {
>     	/* Allocation OK */
>     	syMallocMultiStat(heaph, &whileSize, &bigSize);
>     	DoWhatYouWant(foo);
>     	syFreeMulti(&myHeaph, p);
>     }
>     syMallocMultiDelete(&heaph);

### 備考

> インタフェースを変更した領域の範囲内でのメモリ管理はユーザ責任によって行う必要があります。 この時にそれぞれの引数 heaph に応じた管理情報を持つ必要がありますが、SYS_MALCM_HEAPH 構造体の Root、 Freep メンバーの領域は、当該のサブヒープに対してデフォルトの syMallocMulti() インタフェースの関数群を使用しない場合には独自に使用しても構いません。

### 参照

> syMallocMultiCreate() | サブヒープの登録
> syMallocMultiDelete() | サブヒープの登録解除
> syMallocMulti() | syMallocMulti サブヒープからのメモリ取得
> syReallocMulti() | サブヒープ上での realloc 操作
> syFreeMulti() | サブヒープから取得したメモリ領域の開放
> syCallocMulti() | サブヒープ領域への calloc 操作
> syMallocMultiStat() | サブヒープ領域の使用状況調査
> syMallocChangeIF() | malloc系関数の入れ替え

syMallocMultiChangeIF

COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000