图(9) 申请内存图
图(10)查看已分配区图
图(11)查看空闲区图
图(12)释放内存图
图(13)查看内存状态图
最佳算法和最先算法的比较:
图(13)两算法的对比图
五、程序清单 #include
int start; 定义分区的首地址 int end; 定义分区的尾地址 int len; 定义分区的长度 int sign;定义分区的进程号 struct area * next;定义进程的指针 };
struct area*freehead=NULL;声明 freehead 是型结构指针。 初始freehead指针为空。 struct area*usedhead=NULL;声明 usedhead 是型结构指针。初始usedhead指针为空。 void create();创建内存区 void print(area*); void ask(area*); void ask1(area*); void correct(area*,int);
area * delempty();初始化 void inserused(area *,int ,int ); void inserfree(area * ); void setfree();
void listID();//最先适应法 void listlen();/最优适应法 void swap(area *,area *); //初始化
area * delempty(){ }
//最优适应法 void listlen(){
int n=0; 初始为零
area *p9=freehead->next,*p0=freehead,*p11,*p12,*p13; while(p0!=NULL){不为空 }
p0=freehead;把空闲区赋值给p0 if (n==1)
return;
{
else
while(p9!=NULL)
p12=p0; 把p0空闲区给p12 p13=p9;把p9空闲区给p13 p0=p0->next; p0指向下一个地址 p0=p0->next;指向下一个地址 n++;n加一
area * p1=freehead;把空闲区首地址赋值给p1
if(p1->next==NULL)
if(p1->len==0){
return NULL; else { } }
p1=p1->next;指向下一个地址