📄 worstfit.h
字号:
//worst-fit策略函数
void* mm_request(int n)
{
int blocksize;
int maxblocksize=0;
memState *temp;
memState *maxBlock;
temp = head;
maxBlock = head;
while(temp!=NULL) //此循环找出空间最大的空闲块由maxBlock指向
{
blocksize = temp->end-temp->begin+1;
// maxblocksize = blocksize;
if(temp->state==1&&blocksize>=n&&blocksize>=maxblocksize)
{
maxblocksize=blocksize;
maxBlock = temp;
}
temp=temp->next;
}
//然后将该块切分
if(maxBlock!=NULL)
{
if(maxblocksize>n) //如果大于拆分
{
memState *addBlock = (memState*)malloc(sizeof(memState)); //将该增加块插入到header后面
addBlock->before = maxBlock;
addBlock->next = maxBlock->next;
if(maxBlock->next!=NULL)
{
maxBlock->next->before = addBlock;
}
maxBlock->next = addBlock;
addBlock->end = maxBlock->end;
maxBlock->end =(maxBlock->begin+n-1);
maxBlock->state=0; //该块已经分配
addBlock->begin = maxBlock->end +1;
addBlock->state = 1;//分割剩余块状态为可用
//////////////////////////////////////
//该注释块内的内容是为测试内存分配效率做准备
blockaddr[count]=&mem[maxBlock->begin];
upDate(); //更新块对应的内存地址数组
count++;
//////////////////////////////////////
return &mem[maxBlock->begin];
}
else if(maxblocksize==n)
{
maxBlock->state = 0;
//////////////////////////////////////
//该注释块内的内容是为测试内存分配效率做准备
blockaddr[count]=&mem[maxBlock->begin];
upDate(); //更新块对应的内存地址数组
count++;
//////////////////////////////////////
return &mem[maxBlock->begin];
}
}
else
return NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -