⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nextfit.h

📁 内存管理系统
💻 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 + -