現在Sega Saturnで開発中です。シンプルでポータブルなmallocライブラリ
コンソールにはいくつかの専用チップがあります。それらのうちのいくつかは専用のRAMおよび/またはVRAMを有する。たとえば、メインRAMを2つの異なる1MBゾーンに分割する方法があります。
私は私が異なるRAMゾーンを宣言して、それらのゾーン内malloc
またはfree
に私を許可することができます、一般的なポータブル、および小型malloc
ライブラリを探しています。
例として、vdp2グラフィックチップがあります。これは、スクリーンモード8bのカラーパレット用の専用VRAMゾーンを有する。
ここでは、すべてのゲームグラフィックのために機能する古典的な方法とプリロードパレット、 を使用できますが、現在のグラフィックスで実際に使用されているパレットだけを読み込むのはなぜですか?
ここでは、色(パレットエントリ)を割り当てて解放するシステムが必要ですが、最大パレットサイズである255色以上を割り当てようとすると失敗します。
基本的に、私は彼らにいくつかの動的なメモリゾーンとのalloc /自由を宣言することができるようにしたい:
u32 palRam = defineMallocZone(COLOR_PALETTE,COLOR_PALETTE_SIZE);
u32 m68kRam = defineMallocZone(M68KVRAM,M68KVRAMSIZE);
u32 highRam = defineMallocZone(HIGHRAM,1024*1024);
u16* my64colors = (u16*)magicMalloc(palRam,64*sizeof(u16));
土星に付属のツールチェーンの主なmalloc
が外に働いていませんでしたボックスには、私はすぐにこのたわごとを書いた:
#define mallocSizeK 512
#define mallocSizeB mallocSizeK*1024
void * mymalloc(u32 n)
{ static u8 m[mallocSizeB];
static u32 c=0;
if(!n) return (void*)&c;
while(n%4) n++;
u32 nn = c+n;
if(nn > mallocSizeB) return 0;
u8 * p = &m[c]; c = nn; memset(p,0,n);
return (void*)p;
}
それは私の現在のテストのために大丈夫ですが、それはそれは本当に自由を必要とする(、長期的には問題ありません。しかし、これは私が欲しいものではありません!全体=))
要約すると、上で概説したようにメモリゾーンを処理するには、最小限で基本的でシンプルなコードが必要です。今のところ、メモリ管理アルゴリズムは効率的である必要はなく、ただ動作させるだけです。あるいは、私は自分自身を実装しようとすることができる古典的で単純なメモリ管理アルゴリズムへのリンクを私に送ることができますか?
編集> [OK]を私はそれを自分自身を行って、here is a gist
非常に進化したが、このテストで正常に動作しない:
u32* b1 = bnew(M68KVRAM,512);
void*mtest[500]; u32 allocSize = 8;
u32 n = 0, nb=0, total=0;
while(n<500){
u32 sz = rand()%(allocSize*1024);
void *a = bmalloc(b1,sz);
if(!a) break;
memset(a,1,sz);
mtest[n++] = a;
total += sz;
};
nb = n; printlr("allocated %u/512 kb in %u 0~%uk blocs",total>>10,nb,allocSize);
printl("free them all .. ");
u32 freertn = 0; for(n=0;n<nb;n++) freertn |= (u32)bfree(b1,mtest[n]);
if(freertn) printlr("fail"); else printlr("ok");
*mtest = bmalloc(b1,512*1024);
if(*mtest) memset(*mtest,200,512*1024);
printlr("final 512k allocation return : 0x%x",*mtest);
あなたが求めているものを伝えるのは難しいです。あなたはmallocライブラリを探していますか? mallocの例?あなたのmallocと一緒に自由に行くことができますか?これを編集し、簡潔な質問を1つ入れてください。 – jwiscarson