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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<>ddress,&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].address

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<<"输出空闲区表:\n起始地址分区长度状态\n"<

for(i=0;i

(2);

(12);

cout<

(10);

cout<

(8);

cout<

}

cout<

cout<<"输出已分分区表:\n起始地址分区长度占用作业名\n"<

for(i=0;i

(2);

(12);

cout<

(10);

cout<

(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=job_length){

flag=1;

}

}

if(flag==0){ ength>=job_length){ddress=frees[i].address; ag,job_name);

occupys[occupy_quantity].length=job_length;

occupy_quantity++;

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

frees[i].address+=job_length;

frees[i].length-=job_length;

}

else{

for(j=i;j

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

}

free_quantity--;

cout<<"内存空间成功:)"<

}

}

}

void reclaim()ag,job_name)){

flag=i;

address=occupys[i].address;

length=occupys[i].length;

}

}

if(flag==-1){ ddress+frees[i].length)==address){

if(((i+1)

frees[i].length=frees[i].length+frees[i+1].length+length;

for(j=i+1;j

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

}

free_quantity--;

p=1;

}

else{

frees[i].length+=length;

p=1;

}

}

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

frees[i].address=address;

frees[i].length+=length;

p=1;

}

}

if(p==0){

frees[free_quantity].address=address;

frees[free_quantity].length=length;

free_quantity++;

}ddress=-1;ength=0;

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

occupys[i].address=-1;ength=0;

strcpy(occupys[i].tag,"");

}

free_quantity=0;

occupy_quantity=0;

flag=read();

while(flag==1){

sort();

cout<<"选择功能项: (0-退出,1-分配内存,2-回收内存,3-显示内存)\n"<

cout<<"选择功项(0-3):";

cin>>chioce;

switch(chioce){

case 0:

flag=0;

break;

case 1:

ear();

break;

case 2:

相关文档
最新文档