📄 nextfit.h
字号:
void* mm_request(int n)
{
// memState *addBlock = (memState*)malloc(sizeof(memState));
memState *temp = nextfit;//上次分配成功时的位置
//temp = temp->next; //从上次分配成功位置的下一个开始搜索
while(temp!=NULL) //搜索到末尾再绕回
{
if(temp->state==1&&(temp->end-temp->begin+1)>n)
{
memState *addBlock = (memState*)malloc(sizeof(memState)); //将该增加块插入到header后面
addBlock->before = temp;
addBlock->next = temp->next;
if(temp->next!=NULL)
{
temp->next->before = addBlock;
}
temp->next = addBlock;
addBlock->end = temp->end;
temp->end =(temp->begin+n-1);
temp->state=0; //该块已经分配
addBlock->begin = temp->end +1;
addBlock->state = 1;//分割剩余块状态为可用
nextfit=temp->next;
//////////////////////////////////////
blockaddr[count]=&mem[temp->begin];
upDate();
count++;
//////////////////////////////////////
return &mem[temp->begin];
}
else if(temp->state==1&&(temp->end-temp->begin+1)==n)
{
temp->state=0;
nextfit=temp->next;
//////////////////////////////////////
blockaddr[count]=&mem[temp->begin];
upDate();
count++;
//////////////////////////////////////
return &mem[temp->begin];
}
else
temp=temp->next;
}//从当前位置搜索到末尾
//再从头搜索到当前位置
temp=head;
while(temp->begin!=nextfit->begin) //判断是否从开头搜索到“当前”位置
{
if(temp->state==1&&(temp->end-temp->begin+1)>n)
{
memState *addBlock = (memState*)malloc(sizeof(memState)); //将该增加块插入到header后面
addBlock->before = temp;
addBlock->next = temp->next;
if(temp->next!=NULL)
{
temp->next->before = addBlock;
}
temp->next = addBlock;
addBlock->end = temp->end;
temp->end =(temp->begin+n-1);
temp->state=0; //该块已经分配
addBlock->begin = temp->end +1;
addBlock->state = 1;//分割剩余块状态为可用
nextfit=temp->next;
////////////////////////////////////
blockaddr[count]=&mem[temp->begin];
upDate();
count++;
////////////////////////////////////
return &mem[temp->begin];
}
else if(temp->state==1&&(temp->end-temp->begin+1)==n)
{
temp->state=0;
nextfit=temp->next;
//////////////////////////////////////
blockaddr[count]=&mem[temp->begin];
upDate();
count++;
//////////////////////////////////////
return &mem[temp->begin];
}
else
temp=temp->next;
}
return NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -