1 / 13
文档名称:

最佳适应算法源代码.doc

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

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

分享

预览

最佳适应算法源代码.doc

上传人:一花一叶 2019/5/4 文件大小:36 KB

下载得到文件列表

最佳适应算法源代码.doc

相关文档

文档介绍

文档介绍:Forpersonaluseonlyinstudyandresearch;mercialuse膁#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栏是下邻空