1 / 13
文档名称:

最佳适应算法源代码.doc

格式:doc   大小:36KB   页数:13页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

最佳适应算法源代码.doc

上传人:花开一叶 2019/3/18 文件大小:36 KB

下载得到文件列表

最佳适应算法源代码.doc

文档介绍

文档介绍:膈#include<>莅#include<>蒂蚈//全局变量羈floatminsize=5;膂intcount1=0;薁intcount2=0;肈#definem10 //假定系统允许的空闲区表最大为m蒄#definen10 //假定系统允许的最大作业数量为n芄虿//已分配表的定义蒇struct膅{floataddress;//已分分区起始地址莅floatlength; //已分分区长度,单位为字节肂intflag; //已分配区表登记栏标志,"0"表示空栏目膀}used_table[n]; //已分配区表对象名羅肂//空闲区表的定义:膀struct蚀{floataddress; //空闲区起始地址蚆floatlength; //空闲区长度,单位为字节膄intflag; //空闲区表登记栏标志,用"0"表示空栏目,用"1"表示未分配蒂}free_table[m]; //空闲区表对象名聿莆芅//函数声明蚁voidinitialize(void);蒈intdistribute(int,float);膆intrecycle(int);肃voidshow();羃袈袇//初始化两个表肄voidinitialize(void)肁{莇 inta;蚇 膅 for(a=0;a<=n-1;a++)芀 used_table[a].flag=0; //已分配表的表项全部置为空表项肁 莈 free_table[0].address=1000;羃 free_table[0].length=1024;薂 free_table[0].flag=1; //空闲区表的表项全部为未分配蒀}膈羄//最优分配算法实现的动态分区蚁intdistribute(intprocess_name,floatneed_length)衿{薄 inti,k=-1; //k用于定位在空闲表中选择的未分配栏肆 floatads,len;肃 intcount=0; 艿莅 i=0; 袃 while(i<=m-1)//循环找到最佳的空闲分区膁 {螈 if(free_table[i].flag==1&&need_length<=free_table[i].length)肅{羄 count++;芀 if(count==1||free_table[i].length<free_table[k].length)*** k=i;袅}羆蚂 i=i+1; 薇 }薆螃 if(k!=-1)螀 { 芀 if((free_table[k].length-need_length)<=minsize)//整个分配莆{ 袄 free_table[k].flag=0;膃 ads=free_table[k].address;蚀 len=free_table[k].length;肇}蚂 else芁{ //切割空闲区腿 ads=free_table[k].address;螇 len=need_length;蚃莀 free_table[k].address+=need_length;薈 free_table[k].length-=need_length;薇}螄螂 i=0; 羈//循环寻找内存分配表中标志为空栏目的项芈while(used_table[i].flag!=0)薂袀{i=i+1;} 莇肈 if(i<=n-1)//找到,在已分配区表中登记一个表项薃{ 芃used_table[i].address=ads;肀 used_table[i].length=len;薄 used_table[i].flag=process_name;蚅 count1++;莁}薀 else//已分配区表长度不足芅{ 蒂 if(free_table[k].flag==0)//将已做的整个分配撤销葿{ 罿 free_table[k].flag=1;羅 free_table[k].address=ads;蒃 free_table[k].length=len;袂}荿 else//将已做的切割分配撤销螅{ 薅 free_table[k].address=ads;羀 free_table[k].length+=len;螈}蒆莂 cout<<"内存分配区已满,分配失败!\n";莃 return0;芇}芆 }蒃 else蒁 {羁 cout<<"无法为该作业找到合适分区!\n";羇 return0;蒅 }蕿 returnprocess_name;莀}螇节intrecycle(intprocess_name)羂{蝿 inty=0;蒇 floatrecycle_address,recycle_length;莄 inti,j,k; //j栏是下邻空闲区,k栏是上栏空闲区肀 intx;腿膈//在内存分配表中找到要回收的作业莅 while(y<