#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=
最佳适应算法源代码 来自淘豆网www.taodocs.com转载请标明出处.