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

📄 memmenage.cpp

📁 内存管理系统
💻 CPP
字号:
/*////////////////
////////////////*/

#include "memmenage.h"
//注释其中一个使用另一个方案分配内存

//#include "firstfit.h"  
//#include "nextfit.h"
#include "worstfit.h" 
#include "initRand.h"  //是每次产生的随机数都不相同
#include "test.h"


void showMemState();

void *mm_init();          //初始化内存块为一整块

//测试内存管理
int main()
{
	int n,p;
	char c;
	if(!mm_init())
			printf("memery inital failed!\n");

	initRand();
	for(int i =0;i<10;i++)
	{
		request_size_sum = 0;
		request_step_sum = 0;
		request_success_sum = 0;
		printf("内存利用率:%.2f%%\n",test()*100);

		printf("平均请求尺寸:%.1f\n",(float)((float)request_size_sum/(float)request_step_sum));
		printf("平均搜索步骤:%.2f\n",(float)((float)(float)request_step_sum)/request_success_sum);
		printf("-------------------------------------------------\n");
		Sleep(1000);
	}


/*
	c = 'a';
	while(c!='q')
	{
		printf("\nenter \'r\'to request,enter \'l' to release, enter 'q' to exit:");
		c = getchar();
		switch(c)
		{
			case 'r':
				printf("\nrequest size:");
				fflush(stdin);
				scanf("%d",&n);
				fflush(stdin);
				if(!mm_request(n))
					printf("memery request failed!\n");
				showMemState();
				break;
			case 'l':
				printf("\nrelease pointer:");
				scanf("%d",&p);
				mm_release(&mem[p]);
				showMemState();
				break;
			default:
				;
		}
	}
*/

	/*
	printf("enter the size you want get the memery:");
	scanf("%d",&n);
	
	if(!mm_request(n))
		printf("failed memery request!\n");
	else printf("Succed in memery request~\n");

	printf("memery state:\n");
	showMemState();
	*/

	return 0;
}


void *mm_init()    //先把内存初始化为一整块空闲块
{
	head = (memState*)malloc(sizeof(memState));
	nextfit=head;
	if(!head)
	{
		printf("Memery Error!");
		return 0;  //错误返回0
	}

	head->begin =0; //该块内存起始位置索引为0;
	head->end = MEM_SIZE-1;  //该块在内存中的结束位置为最后一个
	head->before = NULL;
	head->next=NULL;
	head->state = 1; //可以使用,该内存块未被分配


	//初始化块地址为NULL
	for(int i=0;i<MEM_SIZE;i++)
	{
		blockaddr[i] = NULL;
	}

	return mem;
}





void showMemState()
{
	int i;
	memState *temp = head;

	printf("count number:%d\n",count);

	while(temp!=NULL)
	{
		for(i=0;i<=(temp->end-temp->begin);i++)
		{
			if(temp->state==0)
				printf("|");//表示该部分内存已经被占用
			if(temp->state==1)
				printf("-");//表示该部分内存空闲
		}
		temp=temp->next;
	}

}

⌨️ 快捷键说明

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