My memory manager
Posted: Fri Nov 03, 2006 8:25 am
I wrote this memory manager. Do you think it is good? How can I optimize it?
Code: Select all
unsigned int bitmap[32768];
void initmemory(){
for (unsigned int i = 0; i<16; i++)
{
bitmap[i] = 0xFFFFFFFF;
}
for (unsigned int i = 16; i<32768; i++)
{
bitmap[i] = 0x00000000;
}
}
void *malloc(unsigned int size)
{
unsigned int pagenum = (size / 4096) + 1;
unsigned int pagecontinue = 0;
int bit = 0;
int i = 0;
int j = 0;
unsigned long int address;
for (i = 16; i<32768; i++)
{
while(j<32)
{
bit = bitmap[i] & (1<<i);
if (bit == 0)
{
pagecontinue++;
if (pagecontinue == pagenum)
break;
j++;
}
else
{
j++;
pagecontinue = 0;
}
}
if (pagecontinue == pagenum)
break;
j=0;
}
if (pagecontinue != pagenum)
return 0;
address = ((i*32+j+1)-pagecontinue)*4096;
i = (address/4096)/32;
j = (address/4096)%32;
pagecontinue = 0;
while (pagecontinue < pagenum)
{
bitmap[i] = (bitmap[i] | (1<<j));
j++;
pagecontinue++;
if (j==32 && pagecontinue < pagenum)
{
i++;
j=0;
}
}
return (void*)address;
}