資源簡介
(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
評論
共有 條評論