内存分配算法实例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
getch();
}
/*---------------------------------------------------------------*/
/*函数名:Main() */
/*功能:主函数*/
/*--------------------------------------------------------------*/
{
if(MemList[i].size - size <= MINSIZE)
MemList[i].info = 'u' ;
else
{
for(j=MEMSIZE-2;j>i;j--)
{
MemList[j+1] = MemList[j];
}
MemList[i+1].start=MemList[i].start + size;
{
for(j=MEMSIZE-2;j>i;j--)
{
MemList[j+1] = MemList[j];
}
MemList[i+1].start=MemList[i].start + size;
MemList[i+1].size =MemList[i].size - size;
MemList[i+1].info ='f';
/*--------------------------------------------------------------*/
void BestFit_new()
{
int i,j,k,flag,size;
char temp[10];
printf("How many MEMORY requir?");gets(temp);
void del()
{
int i,number;
char temp[10];
printf("Please Inupt the NUMER you want to stop:");gets(temp);
number=atoi(temp);
if(MemList[number].info == 'u')
{
MemList[i] = temp ;
MemList[0].start= 0;
MemList[0].size = MEMSIZE;
MemList[0].info = 'f';
}
/*--------------------------------------------------------------*/
{
if(MemList[i].info == 'u') used += MemList[i].size;
printf("%5d%15d%15d%15s\n",i,MemList[i].start,MemList[i].size,MemList[i].info == 'u'?"USED":"FREE");
printf("How many MEMORY requir?");gets(temp);
size=atoi(temp);
for(i=0;i<MEMSIZE-1 && MemList[i].info!='e' ; i++)
{
if(MemList[i].size >= size && MemList[i].info == 'f')
int start; /*起始地址*/
int size; /*大小*/
char info; /*状态:'f'空闲(FREE);'u'占用(USED);'e'表结束(END)*/
}MEMINFO;
MEMINFO MemList[MEMSIZE];
void Display();
/*--------------------------------------------------------------*/
{
k=MemList[i].size;
j=i;
}
}
}
i=j;
if(flag==0)
{
printf("NOT Enough Memory!!\n");
getch();
}
elseif(MemList[i].size - size <= MINSIZE)
MemList[i].info = 'u' ;
else
main()
{
char ch;
InitAll();
while(1)
{
clrscr();
printf(" Memory Manager\n");
printf("============================来自百度文库============================\n");
printf(" 1. Get a block use the FIRSTFIT method \n");
/*函数名:InitAll() */
/*功能:初始化所有变量。*/
/*--------------------------------------------------------------*/
void InitAll()
{
int i;
MEMINFO temp={0,0,'e'};
for(i=0;i<MEMSIZE;i++)
printf("%5s%15s%15s%15s\n","Number","Start","Size","Info");
printf("--------------------------------------------------------\n");
for(i=0;i<MEMSIZE && MemList[i].info != 'e';i++)
实验
一.实验目的
1.掌握内存动态分区的实现方法。
2.进一步掌握内存块的分配策略。
3.掌握内存块申请与释放的算法与实现。
二.实验内容
写一个程序,模拟实现内存的动态分区分配算法。假设内存大小为100K。
1.分别使用首次适应算法、最佳适应算法分配内存空间。
2.实现对内存空间的释放。
3.显示内存分配情况。
三.实验环境
MemList[i]=MemList[i+1];
}
if( MemList[number-1].info == 'f')
{
MemList[number-1].size += MemList[number].size;
for(i=number;i<MEMSIZE-1 && MemList[i].info!='e'; i++)
MemList[i+1].size =MemList[i].size - size;
MemList[i+1].info ='f';
MemList[i].size=size;
MemList[i].info='u' ;
}
break;
}
}
if(i==MEMSIZE-1 || MemList[i].info == 'e')
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define MEMSIZE 100/*定义内存大小为100*/
#define MINSIZE 2/*分配时如果剩余值小于此值则不再分割*/
typedef struct _MemoryInformation{ /*空间分区表结构*/
/*函数名:Display() */
/*功能:显示内存状态*/
/*--------------------------------------------------------------*/
void Display()
{
int i,used=0;
clrscr();
printf("\n------------------------------------------------------\n");
MemList[i].size=size;
MemList[i].info='u' ;
}
Display();
}
/*---------------------------------------------------------------*/
/*函数名:del() */
/*功能:释放一块内存*/
/*--------------------------------------------------------------*/
}
printf("---------------------------------------------------------\n");
printf(" Total Size:%-10d Used:%-10d Free:%-10d\n",MEMSIZE,used,MEMSIZE-used);
printf("\n\nPress Any Key to Return...\n");
{
printf("NOT Enough Memory!!\n");
getch();
}
Display();
}
/*---------------------------------------------------------------*/
/*函数名:BestFit_new() */
/*功能:使用最佳适应算法分配内存*/
MemList[number].info = 'f';
if( MemList[number+1].info == 'f')
{
MemList[number].size += MemList[number+1].size;
for(i=number+1;i<MEMSIZE-1 && MemList[i].info!='e'; i++)
size=atoi(temp);
j=0;
flag=0;
k=MEMSIZE;
for(i=0;i<MEMSIZE-1 && MemList[i].info!='e' ; i++)
{
if(MemList[i].size >= size && MemList[i].info == 'f')
{
flag=1;
if(MemList[i].size < k)
/*函数名:FirstFit_new() */
/*功能:使用首次适应算法分配内存*/
/*--------------------------------------------------------------*/
void FirstFit_new()
{
int i,j,size;
char temp[10];
ch=getch();
switch(ch)
{
case '1':FirstFit_new();break;
case '2':BestFit_new();break;
case '3':del();break;
case '4':Display();break;
case '5':exit(0);
}
}
}
说明:这个实验的思想同样可用于空闲磁盘块的管理。
printf(" 2. Get a block use the BESTFIT method \n");
printf(" 3. Free a block \n");
printf(" 4. Display Mem infomation \n");
printf(" 5. Exit \n");
printf("========================================================\n");
MemList[i]=MemList[i+1];
}
}
else
{
printf("This Number is NOT exist or is NOT used!\n");
getch();
}
Display();
}
/*--------------------------------------------------------------*/
本实验可以在Turbo C环境下实现,也可以使Linux系统的gcc实现。
四.实验程序及分析
/*进入程序后可以根据菜单项进入不同的模块*/
/* 1.使用首次适应算法分配空间*/
/* 2.使用最佳适应算法分配空间*/
/* 3.释放一块空间*/
/* 4.显示内存分配情况*/
/* 5.退出系统*/
/*--------------------------------------------------------------*/
}
/*---------------------------------------------------------------*/
/*函数名:Main() */
/*功能:主函数*/
/*--------------------------------------------------------------*/
{
if(MemList[i].size - size <= MINSIZE)
MemList[i].info = 'u' ;
else
{
for(j=MEMSIZE-2;j>i;j--)
{
MemList[j+1] = MemList[j];
}
MemList[i+1].start=MemList[i].start + size;
{
for(j=MEMSIZE-2;j>i;j--)
{
MemList[j+1] = MemList[j];
}
MemList[i+1].start=MemList[i].start + size;
MemList[i+1].size =MemList[i].size - size;
MemList[i+1].info ='f';
/*--------------------------------------------------------------*/
void BestFit_new()
{
int i,j,k,flag,size;
char temp[10];
printf("How many MEMORY requir?");gets(temp);
void del()
{
int i,number;
char temp[10];
printf("Please Inupt the NUMER you want to stop:");gets(temp);
number=atoi(temp);
if(MemList[number].info == 'u')
{
MemList[i] = temp ;
MemList[0].start= 0;
MemList[0].size = MEMSIZE;
MemList[0].info = 'f';
}
/*--------------------------------------------------------------*/
{
if(MemList[i].info == 'u') used += MemList[i].size;
printf("%5d%15d%15d%15s\n",i,MemList[i].start,MemList[i].size,MemList[i].info == 'u'?"USED":"FREE");
printf("How many MEMORY requir?");gets(temp);
size=atoi(temp);
for(i=0;i<MEMSIZE-1 && MemList[i].info!='e' ; i++)
{
if(MemList[i].size >= size && MemList[i].info == 'f')
int start; /*起始地址*/
int size; /*大小*/
char info; /*状态:'f'空闲(FREE);'u'占用(USED);'e'表结束(END)*/
}MEMINFO;
MEMINFO MemList[MEMSIZE];
void Display();
/*--------------------------------------------------------------*/
{
k=MemList[i].size;
j=i;
}
}
}
i=j;
if(flag==0)
{
printf("NOT Enough Memory!!\n");
getch();
}
elseif(MemList[i].size - size <= MINSIZE)
MemList[i].info = 'u' ;
else
main()
{
char ch;
InitAll();
while(1)
{
clrscr();
printf(" Memory Manager\n");
printf("============================来自百度文库============================\n");
printf(" 1. Get a block use the FIRSTFIT method \n");
/*函数名:InitAll() */
/*功能:初始化所有变量。*/
/*--------------------------------------------------------------*/
void InitAll()
{
int i;
MEMINFO temp={0,0,'e'};
for(i=0;i<MEMSIZE;i++)
printf("%5s%15s%15s%15s\n","Number","Start","Size","Info");
printf("--------------------------------------------------------\n");
for(i=0;i<MEMSIZE && MemList[i].info != 'e';i++)
实验
一.实验目的
1.掌握内存动态分区的实现方法。
2.进一步掌握内存块的分配策略。
3.掌握内存块申请与释放的算法与实现。
二.实验内容
写一个程序,模拟实现内存的动态分区分配算法。假设内存大小为100K。
1.分别使用首次适应算法、最佳适应算法分配内存空间。
2.实现对内存空间的释放。
3.显示内存分配情况。
三.实验环境
MemList[i]=MemList[i+1];
}
if( MemList[number-1].info == 'f')
{
MemList[number-1].size += MemList[number].size;
for(i=number;i<MEMSIZE-1 && MemList[i].info!='e'; i++)
MemList[i+1].size =MemList[i].size - size;
MemList[i+1].info ='f';
MemList[i].size=size;
MemList[i].info='u' ;
}
break;
}
}
if(i==MEMSIZE-1 || MemList[i].info == 'e')
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define MEMSIZE 100/*定义内存大小为100*/
#define MINSIZE 2/*分配时如果剩余值小于此值则不再分割*/
typedef struct _MemoryInformation{ /*空间分区表结构*/
/*函数名:Display() */
/*功能:显示内存状态*/
/*--------------------------------------------------------------*/
void Display()
{
int i,used=0;
clrscr();
printf("\n------------------------------------------------------\n");
MemList[i].size=size;
MemList[i].info='u' ;
}
Display();
}
/*---------------------------------------------------------------*/
/*函数名:del() */
/*功能:释放一块内存*/
/*--------------------------------------------------------------*/
}
printf("---------------------------------------------------------\n");
printf(" Total Size:%-10d Used:%-10d Free:%-10d\n",MEMSIZE,used,MEMSIZE-used);
printf("\n\nPress Any Key to Return...\n");
{
printf("NOT Enough Memory!!\n");
getch();
}
Display();
}
/*---------------------------------------------------------------*/
/*函数名:BestFit_new() */
/*功能:使用最佳适应算法分配内存*/
MemList[number].info = 'f';
if( MemList[number+1].info == 'f')
{
MemList[number].size += MemList[number+1].size;
for(i=number+1;i<MEMSIZE-1 && MemList[i].info!='e'; i++)
size=atoi(temp);
j=0;
flag=0;
k=MEMSIZE;
for(i=0;i<MEMSIZE-1 && MemList[i].info!='e' ; i++)
{
if(MemList[i].size >= size && MemList[i].info == 'f')
{
flag=1;
if(MemList[i].size < k)
/*函数名:FirstFit_new() */
/*功能:使用首次适应算法分配内存*/
/*--------------------------------------------------------------*/
void FirstFit_new()
{
int i,j,size;
char temp[10];
ch=getch();
switch(ch)
{
case '1':FirstFit_new();break;
case '2':BestFit_new();break;
case '3':del();break;
case '4':Display();break;
case '5':exit(0);
}
}
}
说明:这个实验的思想同样可用于空闲磁盘块的管理。
printf(" 2. Get a block use the BESTFIT method \n");
printf(" 3. Free a block \n");
printf(" 4. Display Mem infomation \n");
printf(" 5. Exit \n");
printf("========================================================\n");
MemList[i]=MemList[i+1];
}
}
else
{
printf("This Number is NOT exist or is NOT used!\n");
getch();
}
Display();
}
/*--------------------------------------------------------------*/
本实验可以在Turbo C环境下实现,也可以使Linux系统的gcc实现。
四.实验程序及分析
/*进入程序后可以根据菜单项进入不同的模块*/
/* 1.使用首次适应算法分配空间*/
/* 2.使用最佳适应算法分配空间*/
/* 3.释放一块空间*/
/* 4.显示内存分配情况*/
/* 5.退出系统*/
/*--------------------------------------------------------------*/