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

📄 worstfit.h

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