主存空间的分配实验.doc:..1•采用可变分区管理,使用首次适应算法实现主存的分配与回收#include<iostream>#include<>#inelude<vector>#inelude<algorithm>#include<>usingnamespacestd;structblock{ 〃定义空闲块的记录表;intbegin;intlength;};boolcmp(constblock&pl,constblock&p2){讦(・begin)returntrue;returnfalse;}vector<block>mem_table;vector<block>free_table;voidinit(){ 〃初始化空闲块,并将空闲信息记录到空闲分区说明表中;blocknow;while(cin»»now」ength,>=0){(now);}sort((),(),cmp);if(mem_table[0].begin>0){=0;now」ength=mem_table[O].begin;(now);}vector<block>::iteratorp=();while(p!=()&&p+l!=()){if(p->begin+p->lengthv(p+l卜〉begin){・>begin+p・>length;now」ength=(p+l)・>begin-;(now);}P++;}if(mem_table[()-l].begin+mem_table[()-l].length<256){=mem_table[()-l].begin+mem_table[()-l].length;now」ength=256-;(now);}sort((),(),cmp);}voidapplacation(constintlenght){ 〃内存申请操作;vector<block>::iteratorp=();while(p!=()){if(p->length>=lenght){blocknow;・>begin;now」ength=lenght;(now);if(p->length==lenght) 〃查找成功就将内存分配岀去;(p);else{p->begin+=lenght;p->length-=leright;}cout«H分配成功!"«endl;return;}P++;}cout«"内存不够,无法分配"«endl;exit(O);}voidprint(){ 〃主存空间占用表和空闲分区说明表的打卬;coutvv”主存空间占用情况"vvendl起始地址 长度"«endl«endl;for(inti=O;i<();i++)cout«mem_table[i].beginvv" "vvmem_table[i]」ength«endl;cout«endlvv“空闲区表n«endl«“起始地址 长度"«endl;for(inti=O;i<();i++)cout«free_table[i].begi "«free_table[i].lengthvvendl;}voidrecover(){ 〃内存的回收;intt;t=rand()%(); 〃随机选取一个非系统内存块进行回收;while(t==0)t=rand()%();vector<block>::iteratorp=t+();(*p);(p);〃将内存块与空闲分区进行合sort((),(),cm
主存空间的分配实验 来自淘豆网www.taodocs.com转载请标明出处.