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

📄 test.h

📁 内存管理系统
💻 H
字号:
//测试要求:
//平均请求尺寸
//内存的平均利用率
//找到合适空闲块需要的平均步骤

#include <math.h>
#include "release.h"
#define SIM_STEP 40

//选择一个要释放的块
float memUseEff(memState *head)
{
	memState *temp = head;
	float nouse=0;
	while(temp!=NULL)
	{
		if(temp->state==1)//如果该块未被分配
		{
			nouse=nouse+(temp->end-temp->begin+1);
		}
		temp=temp->next;
	}

	return ((float)MEM_SIZE-nouse)/(float)MEM_SIZE;
}

void *selectBlock()
{
	int blocknum;
	blocknum = (int)rand()%count;
	return blockaddr[blocknum];
}

float test()
{
	float efficient=0;
	int i,n;
	void *p;//释放块的地址
//	float mem_inuse;  //存放使用的内存数
	float mem_notuse; //存放无法分配时的空闲内存数
	int flag;  

	
	int sim_step = SIM_STEP;
	float eff[SIM_STEP];
	char *request_success;

	/////////////////////////////////////////////////////////////////////////
	//测试框架
	/////////////////////////////////////////////////////////////////////////
	//for (i=0; i<sim_steps; i++) 
	//{
	//	do
	//	{
	//		计算请求尺寸n
	//		mm_request(n);
	//	}while (request successful);
	//	选择待释放块p
	//	release(p);
	//}
	//框架先是不断的请求内存直到无法请求内存
	//然后释放一块内存,继续请求。。。。
	////////////////////////////////////////////////////////////////////////

	for(i=0;i<sim_step;i++)
	{
		flag = 0;
		do
		{
			n = ((int)rand())%(MEM_SIZE+1);  //随机产生一个小于最大内存数的值
			request_success=(char*)mm_request(n);
			request_size_sum += n;
			request_step_sum += 1;    //计算请求内存总次数 
			if(flag == 1)
			{			  
				request_success_sum +=1;  //请求内存成功次数
			}
			flag = 1;
		}while(request_success);

		//获得目前内存利用率
		//此时内存申请不成功 下面的函数查看未用的内存和已用内存的比例
		//求出内存利用率
		efficient = memUseEff(head);
		eff[i]=efficient; //保存每次的利用率
		p = selectBlock();
		mm_release(p);
	}
	
	float sum=0;
	for(i = 0;i<sim_step;i++)
	{
		sum = sum + efficient;
	}
	//计算空闲内存数的函数

	//计算使用中的内存数的函数

	efficient = sum/(float)sim_step;
	//efficient = mem_inuse/MEM_SIZE ;  //内存利用率
	return efficient;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -