C言語なら、俺に聞け! <15>
■ このスレッドは過去ログ倉庫に格納されています
0099ビル・ジョブス
NGNGうーん・・・応用って言われてもなー・・・
こんなのでどう?おれの作ったメモリアロケーション(MMUなしバージョン)
だけど、文句しか言えないカワイソーナ貴様には3年がんばっても理解不可能だと
思うけど・・・
typedef struct MCB {
WORD check;
USHORT owner;
DWORD size;
struct MCB *prev,*next;
} MCB;
void *far_malloc(MCB **mh, MCB **mt, void *area, int area_max, int size)
{
MCB *m;
size = (size + (sizeof(int) - 1)) & ~(sizeof(int) - 1);
if (*mt && (size > area_max ||
(DWORD)(*mt)+((*mt)->size+sizeof(MCB)+size) >= (DWORD)(area)+area_max))
return (void*)NULL;
if (!*mh) {
*mh = (MCB*)area;
(*mh)->check = MCB_CHECK_CODE;
(*mh)->owner = Running->id;
(*mh)->size = size + sizeof(MCB);
(*mh)->prev = (*mh)->next = NULL;
*mt = *mh;
return (void*)((DWORD)(*mh)+sizeof(MCB));
}
m = (MCB*)((DWORD)(*mt)+(*mt)->size);
m->check = MCB_CHECK_CODE;
m->owner = Running->id;
m->size = size + sizeof(MCB);
m->prev = *mt;
m->next = NULL;
*mt = (*mt)->next = m;
return (MSG*)((DWORD)(m)+sizeof(MCB));
}
■ このスレッドは過去ログ倉庫に格納されています