欢迎来到天天文库
浏览记录
ID:3922966
大小:651.72 KB
页数:12页
时间:2017-11-25
《存储器的分配与回收(c#实现)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Collections;namespaceOS_2{classsuit//分配主存空间的类{publicvoidzxSuit(ArrayListkzfq,intneedSize)//最先适应法{inti=0;for(;i0)//与空闲分区相等{Console.WriteL
2、ine("存放在第{0:00}块",i+1);kzfq[i]=-(int)kzfq[i];break;}if(needSize0)//小于空闲分区大小{Console.WriteLine("存放在第{0:00}块",i+1);kzfq.Insert(i+1,(int)kzfq[i]-needSize);kzfq[i]=-needSize;break;}}if(i==kzfq.Count){Console.WriteLine("没有足够大的空闲分区来存储!");}}publicvoidzSuit
3、(ArrayListkzfq,intneedSize,boolway)//最…适应法{//布尔变量way为true时表示最优适应法,为false时表示最差适应法inti=-1,balance;//int存储块号balance表示选择分区与目标大小的差额if(way){balance=int.MaxValue;//int.MaxValue表示int类型中最大数}else第1页共12页{balance=int.MinValue;//int.MinValue表示int类型中最in数}for(intj=0;j0){intt
4、empBal=(int)kzfq[j]-needSize;if(tempBal>=0){if(way){if(tempBalbalance){balance=tempBal;i=j;}}}}}if(i==-1){Console.WriteLine("没有足够大的空闲分区来存储!");}else{Console.WriteLine("存放在第{0:00}块",i+1);if(balance==0){kzfq[i]=-(int)kzfq[i];}else{kzfq.Insert(i
5、+1,(int)kzfq[i]-needSize);kzfq[i]=-needSize;}第2页共12页}}}classrecover//回必主存的类{publicrecover(ArrayListfqlb){this.fqlb=fqlb;}publicvoidfindOccupied()//找到可以回收的分区{Console.Write("目前第");for(inti=0;i6、cvoidrecMemory(intsite)//回收分区的函数{intrecSize=(int)fqlb[site];if(recSize>0)//当分区未占用时直接返回{Console.WriteLine("此分区未占用");return;}intfontSize=0,afterSize=0;if(site!=0){fontSize=(int)fqlb[site-1];}if(site!=fqlb.Count-1){afterSize=(int)fqlb[site+1];}if(fontSize>0&&afterSize==0)//回收分区为最后一块且前一块空闲{fq7、lb[site-1]=fontSize+(-recSize);fqlb.RemoveAt(site);第3页共12页}if(fontSize<0&&afterSize==0)//回收分区为最后一块且前一块被占用{fqlb[site]=-recSize;}if(fontSize==0&&afterSize>0)//回收分区为第一块且后一块被空闲{fqlb[site]=-recSize+afterSize;fqlb.RemoveAt(site+1);}if(fontSize==0&&
6、cvoidrecMemory(intsite)//回收分区的函数{intrecSize=(int)fqlb[site];if(recSize>0)//当分区未占用时直接返回{Console.WriteLine("此分区未占用");return;}intfontSize=0,afterSize=0;if(site!=0){fontSize=(int)fqlb[site-1];}if(site!=fqlb.Count-1){afterSize=(int)fqlb[site+1];}if(fontSize>0&&afterSize==0)//回收分区为最后一块且前一块空闲{fq
7、lb[site-1]=fontSize+(-recSize);fqlb.RemoveAt(site);第3页共12页}if(fontSize<0&&afterSize==0)//回收分区为最后一块且前一块被占用{fqlb[site]=-recSize;}if(fontSize==0&&afterSize>0)//回收分区为第一块且后一块被空闲{fqlb[site]=-recSize+afterSize;fqlb.RemoveAt(site+1);}if(fontSize==0&&
此文档下载收益归作者所有