可变分区存储管理方式的内存分配和回收_第1页
可变分区存储管理方式的内存分配和回收_第2页
可变分区存储管理方式的内存分配和回收_第3页
可变分区存储管理方式的内存分配和回收_第4页
可变分区存储管理方式的内存分配和回收_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include<stdio.h>/定义输入/输出函数#include<iostream.h>/数据流输入/输出 #include<string.h>/字符串处理#include<iomanip.h>/参数化输入/输出const int MJ=10;/假定系统允许的最大作业数量为10typedef struct nodeint address;int length;char tag10;job;job freesMJ;int free_quantity;job occupysMJ;int occupy_quantity;int read()FIL

2、E *fp;char fn10;cout<<"请输入初始空闲表文件名:"cin>>fn;if(fp=fopen(fn,"r")=NULL) 其意义是在当前目录下打开文件file a,只允许进行“读”操作,并使fp指向该文件cout<<"错误,文件打不开,请检查文件名"<<endl;elsewhile(!feof(fp)fscanf(fp,"%d,%d",&freesfree_quantity.address,&freesfree_quantity.le

3、ngth);free_quantity+; fscanf(文件指针,格式字符串,输入表列);return 1;return 0;void sort()int i,j,p;for(i=0;i<free_quantity-1;i+)p=i;for(j=i+1;j<free_quantity;j+)if(freesj.address<freesp.address)p=j;if(p!=i)freesfree_quantity=freesi;freesi=freesp;freesp=freesfree_quantity;void view()int i;cout<<endl

4、<<"mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm"<<endl;cout<<"输出空闲区表:n起始地址 分区长度 状态n"<<endl;for(i=0;i<free_quantity;i+)cout.setf(2);cout.width(12);cout<<freesi.address;cout.width(10);cout<<freesi.length;cout.width(8);cout<&l

5、t;freesi.tag<<endl;cout<<endl<<"wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"<<endl;cout<<"输出已分分区表:n起始地址 分区长度 占用作业名n"<<endl;for(i=0;i<occupy_quantity;i+)cout.setf(2);cout.width(12);cout<<occupysi.address;cout.width(10);

6、cout<<occupysi.length;cout.width(8);cout<<occupysi.tag<<endl;void ear()char job_name10;int job_length;int i,j,flag,t;cout<<"请输入分配内存的作业名和空间大小:"cin>>job_name;cin>>job_length;flag=0;for(i=0;i<free_quantity;i+) /寻找空间大于作业的空闲区登记项if(freesi.length>=job_len

7、gth)flag=1;if(flag=0) /未找到空闲区,返回cout<<endl<<"无可用的空闲区n"<<endl;elset=0;i=0;while(t=0)if(freesi.length>=job_length)/找到可用空闲区,开始分配t=1;i+;i-;occupysoccupy_quantity.address=freesi.address; /修改已分配区表 strcpy(occupysoccupy_quantity.tag,job_name);occupysoccupy_quantity.length=job_

8、length;occupy_quantity+;if(freesi.length>job_length)freesi.address+=job_length;freesi.length-=job_length;elsefor(j=i;j<free_quantity-1;j+)freesj=freesj+1;free_quantity-;cout<<"内存空间成功:)"<<endl; void reclaim()/回收作业所占的内存空间char job_name20;int i,j,flag,p=0;int address;int leng

9、th;/寻找已分分区表中对应的登记项cout<<"输入要回收分区的作业名:"cin>>job_name;flag=-1;for(i=0;i<occupy_quantity;i+)if(!strcmp(occupysi.tag,job_name)flag=i;address=occupysi.address;length=occupysi.length;if(flag=-1) /在已分分区表中找不到作业cout<<"没有这个作业名"<<endl;else/修改空闲区表,加入空闲表for(i=0;i<

10、;free_quantity;i+)if(freesi.address+freesi.length)=address)if(i+1)<free_quantity)&&(freesi+1.address=address+length)freesi.length=freesi.length+freesi+1.length+length;for(j=i+1;j<free_quantity;j+)freesj=freesj+1;free_quantity-;p=1;elsefreesi.length+=length;p=1;if(freesi.address=(addres

11、s+length)freesi.address=address;freesi.length+=length;p=1;if(p=0)freesfree_quantity.address=address;freesfree_quantity.length=length;free_quantity+;/删除分配表中的该作业for(i=flag;i<occupy_quantity;i+)occupysi=occupysi+1;occupy_quantity-;void main()int flag=0;int t=1;int chioce=0;int i;for(i=0;i<MJ;i+)f

12、reesi.address=-1;/空闲区表初始化freesi.length=0;strcpy(freesi.tag,"free");occupysi.address=-1;/已分分区表初始化occupysi.length=0;strcpy(occupysi.tag,"");free_quantity=0;occupy_quantity=0;flag=read();while(flag=1)sort();cout<<"选择功能项: (0-退出,1-分配内存,2-回收内存,3-显示内存)n"<<endl;cout<<&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论