エミュレータでもメモリコンパクションを再現しているらしい。

というわけでハマってた理由がやっぱりメモリコンパクション関連だった。
生のポインタを要求するライブラリのコールバック内をMC_GETDPTR(MC_knlAlloc(size));から
extern "C" void* malloc(size_t); ってして、malloc(size)に差し替えてみたらちゃんと動く。
やっぱり"メモリコンパクションが起らないといいな"と思いながら進めるというケンチャナヨ作戦は失敗だった(当然だ)。
ちなみにコンパクションを無理やり起こす為にはどうやらMC_knlGetFreeMemoryという関数を呼べばいいらしい。
しかし、このライブラリに渡すメモリはコンパクション起きたら絶対に駄目なので、
もうこうなるとstatic unsigned char s_Heap[HEAPSIZE]とかして、
こいつにallocationするようにmalloc/freeを自作してあげるしかなくなった。
しかし、昨日ハマった部分から考えるに、global/static変数が大きすぎたらきっとヤバい。
ちなみに今更このライブラリのサンプルソースをみたら、該当の関数はスタックとして実装してやがった。
解放されるメモリを無視できればスタックでいいんだけどね--;