#include <> #include <> // 全局变量 float minsize=5; int count1=0; int count2=0; #define m 10 // 假定系统允许的空闲区表最大为 m #define n 10 // 假定系统允许的最大作业数量为 n // 已分配表的定义 struct {float address; // 已分分区起始地址 float length; // 已分分区长度,单位为字节 int flag; // 已分配区表登记栏标志, "0" 表示空栏目}used_table[n]; // 已分配区表对象名// 空闲区表的定义: struct {float address; // 空闲区起始地址 float length; // 空闲区长度,单位为字节 int flag; // 空闲区表登记栏标志,用"0" 表示空栏目,用"1" 表示未分配}free_table[m]; // 空闲区表对象名// 函数声明 void initialize(void); int distribute(int, float); int recycle(int); void show(); // 初始化两个表 void initialize(void) { int a; 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; // 空闲区表的表项全部为未分配} // 最优分配算法实现的动态分区 int distribute(int process_name, float need_length) { int i, k=-1; //k 用于定位在空闲表中选择的未分配栏 float ads, len; int count=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<=
最佳适应算法源代码 来自淘豆网www.taodocs.com转载请标明出处.