可变分区存储管理方式的内存分配和回收_分区分配内存管理方式

2020-02-27 其他范文 下载本文

可变分区存储管理方式的内存分配和回收由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“分区分配内存管理方式”。

#include//定义输入/输出函数

#include//数据流输入/输出

#include//字符串处理

#include//参数化输入/输出

const int MJ=10;//假定系统允许的最大作业数量为10

typedef struct node{

int addre;

int length;

char tag[10];

}job;

job frees[MJ];

int free_quantity;

job occupys[MJ];

int occupy_quantity;

int read()

{

FILE *fp;

char fn[10];

cout

cin>>fn;

if((fp=fopen(fn,“r”))==NULL){ 其意义是在当前目录下打开文件file a,只允许进行“读”操作,并使fp指向该文件

cout

}

else{

while(!feof(fp)){

fscanf(fp,“%d,%d”,&frees[free_quantity].addre,&frees[free_quantity].length);free_quantity++;fscanf(文件指针,格式字符串,输入表列);

}

return 1;

}

return 0;

}

void sort()

{

int i,j,p;

for(i=0;i

p=i;

for(j=i+1;j

if(frees[j].addre

p=j;

}

}

if(p!=i){

frees[free_quantity]=frees[i];

frees[i]=frees[p];

frees[p]=frees[free_quantity];

}

}

}

void view()

{

int i;

cout

cout

for(i=0;i

cout.setf(2);

cout.width(12);

cout

cout.width(10);

cout

cout.width(8);

cout

}

cout

cout

for(i=0;i

cout.setf(2);

cout.width(12);

cout

cout.width(10);

cout

cout.width(8);

cout

}

}

void ear()

{

char job_name[10];

int job_length;

int i,j,flag,t;

cout

cin>>job_name;

cin>>job_length;

flag=0;

for(i=0;i

if(frees[i].length>=job_length){

flag=1;

}

}

if(flag==0){//未找到空闲区,返回

cout

}

else{

t=0;

i=0;

while(t==0){

if(frees[i].length>=job_length){//找到可用空闲区,开始分配

t=1;

}

i++;

}

i--;

occupys[occupy_quantity].addre=frees[i].addre;//修改已分配区表

strcpy(occupys[occupy_quantity].tag,job_name);

occupys[occupy_quantity].length=job_length;

occupy_quantity++;

if(frees[i].length>job_length){

frees[i].addre+=job_length;

frees[i].length-=job_length;

}

else{

for(j=i;j

frees[j]=frees[j+1];

}

free_quantity--;

cout

}

}

}

void reclaim()//回收作业所占的内存空间

{

char job_name[20];

int i,j,flag,p=0;

int addre;

int length;//寻找已分分区表中对应的登记项

cout

cin>>job_name;

flag=-1;

for(i=0;i

if(!strcmp(occupys[i].tag,job_name)){

flag=i;

addre=occupys[i].addre;

length=occupys[i].length;

}

}

if(flag==-1){ //在已分分区表中找不到作业

cout

}

else{//修改空闲区表,加入空闲表

for(i=0;i

if((frees[i].addre+frees[i].length)==addre){

if(((i+1)

for(j=i+1;j

frees[j]=frees[j+1];

}

free_quantity--;

p=1;

}

else{

frees[i].length+=length;

p=1;

}

}

if(frees[i].addre==(addre+length)){

frees[i].addre=addre;

frees[i].length+=length;

p=1;

}

}

if(p==0){

frees[free_quantity].addre=addre;

frees[free_quantity].length=length;

free_quantity++;

}//删除分配表中的该作业

for(i=flag;i

occupys[i]=occupys[i+1];

}

occupy_quantity--;

}

}

void main()

{

int flag=0;

int t=1;

int chioce=0;

int i;

for(i=0;i

frees[i].addre=-1;//空闲区表初始化

frees[i].length=0;

strcpy(frees[i].tag,“free”);

occupys[i].addre=-1;//已分分区表初始化

occupys[i].length=0;

strcpy(occupys[i].tag,“”);

}

free_quantity=0;

occupy_quantity=0;

flag=read();

while(flag==1){

sort();

cout

cin>>chioce;

switch(chioce){

case 0:

flag=0;

break;

case 1:

ear();

break;

case 2:

reclaim();

break;

case 3:

view();

break;

default:

cout

}

}

}

《可变分区存储管理方式的内存分配和回收.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
可变分区存储管理方式的内存分配和回收
点击下载文档
相关专题 分区分配内存管理方式 分区 分配 内存 分区分配内存管理方式 分区 分配 内存
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文