• 大小: 5KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-25
  • 语言: C/C++
  • 标签: 动态分区  

资源简介

(1)用C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc( )和回收过程free( )。其中,空闲分区通过空闲分区链来管理:在进行内存分配时,系统优先使用空闲区低端的空间。 (2)假设初始状态下,可用的内存空间为640KB,并有下列的请求序列: •作业1申请130KB。 •作业2申请60KB。 •作业3申请100KB。 •作业2释放60KB。 •作业4申请200KB。 •作业3释放100KB。 •作业1释放130KB。 •作业5申请140KB。 •作业6申请60KB。 •作业7申请50KB。 •作业6释放60KB。 请分别采用首次适应算法和最佳适应算法,对内存块进行分配和回收,要求每次分配和回收后显示出空闲分区链的情况。

资源截图

代码片段和文件信息


//新建名为zcfp 的win32 console application工程
//选择菜单项Project->Add to Project->File,在其中编辑好源文件并保存
//通过调用菜单项Build->Rebuild all进行编辑连接,可以在指定的工程目录
//下得到debug->zcfp.exe程序,然后把测试文件input.txt文件保存到debug目录下,
//就可以在控制台进入该debug目录运行程序

#include “stdio.h“
#include “iostream.h“
#include “string.h“
#include “iomanip.h“

const int MAXJOB=100;// 定义表的最大记录数
typedef struct node {
 int start;
 int size;
 char tag[20];
}job;
job frees[MAXJOB];//定义空闲区表 
int free_quantity;
job occupys[MAXJOB];//定义已分配区表
int occupy_quantity;


//初始化函数
void initial()
{
int i;
for(i=0;i{
frees[i].start=-1;
frees[i].size=0;
strcpy(frees[i].tag“free“);
occupys[i].start=-1;
occupys[i].size=0;
strcpy(occupys[i].tag“ “);
}
free_quantity=0;
occupy_quantity=0;
}


//读数据函数
int readData()
{
FILE *fp;
char fname[20];
cout<<“请输入初始空闲表文件名:“;
cin>>fname;
if((fp=fopen(fname“r“))==NULL)
{
cout<<“错误,文件打不开,请检查文件名“< }
else
{
while(!feof(fp))
{
fscanf(fp“%d%d“&frees[free_quantity].start&frees[free_quantity].size);
free_quantity++;
}
return 1;
}
return 0;
}

 
//sort
void sort()
{
int ijp;
for(i=0;i {
p=i;
for(j=i+1;j {
if(frees[j].start {
p=j;
}
}
if(p!=i)
{
frees[free_quantity]=frees[i];
frees[i]=frees[p];
frees[i]=frees[free_quantity];
}
}
}

// 显示函数

void view()
{
int i;
cout< cout<<“当前空闲表:“< cout<<“起始地址  大小  状态“< for(i=0;i {
cout.setf(2);
cout.width(12);
cout< cout.width(10);
cout< cout.width(8);
cout< }

cout< cout<<“当前已分配表:“< cout<<“起始地址  大小  占用作业名“< for(i=0;i {
cout.setf(2);
cout.width(12);
cout< cout.width(10);
cout< cout.width(8);
cout< }
}

//最先适应算法

void earliest()
{
char job_name[20];
int job_size;
int ijflagt;
cout<<“请输入新申请内存空间的作业名和空间大小:“;
cin>>job_name;
cin>>job_size; 
flag=0;
for(i=0;i<=free_quantity;i++)
{

if(frees[i].size>=job_size)
{
flag=1;
}
}
if(flag==0

评论

共有 条评论