(文章待更新)
(1)採用空閒區表,並增加已分配區表。分配演算法採用最佳適應演算法(記憶體空閒區按照尺寸大小從小到大的排列)和迴圈首次適應演算法,實現記憶體的分配與**。
#include#include#include#include#includeusing namespace std;
int pos,n,size; ///查詢位置,分割槽數量,最小分割大小
struct list
l[2000];
struct task
t[2000];
bool cmp(list a,list b)
if(t[l].sad+t[l].rom==l[i].sad)
}//cout}
for(int j=temp; j<=n; j++)
t[j].id++;
n++;
l[temp].id=temp;
l[temp].rom=t[l].rom;
l[temp].sad=t[l].sad;
l[temp].state=0;
}cout<<"記憶體**完畢!"<>tmp;
int k=0;
if(tmp==1)
if(i>n)
if((l[i].state==0||l[i].state==1)&&l[i].rom>=t[i].rom)
else
}else if(l[i].state=0&&l[i].rom-t[k].rom==size)}}
else if(tmp==2)
else if(tmp==3)
print();
else if(tmp==0)
return;
else
}}void bf()///最佳適應演算法
if((l[i].state==0||l[i].state==1)&&l[i].rom>=t[i].rom)
else
}else if(l[i].state=0&&l[i].rom-t[k].rom==size)
}if(i>n)
}else if(tmp==2)
else if(tmp==3)
print();
else if(tmp==0)
return;
else
}}void init()
printf("輸入完畢,當前空閒分割槽表狀態為:\n");
print();
printf("請輸入不再切割的剩餘空間的大小:\n");
cin>>size;
loop2:
int tmp;
cin>>tmp;
if(tmp==1)nf();
else if(tmp==2)bf();
else if(tmp==3)
else if(tmp==4) return;
else
}int main()/*5
50 85
32 155
70 275
60 532
10 98031
12532
130*/
動態分割槽分配演算法
動態分割槽分配演算法 一.順序搜尋的動態分割槽分配演算法 1.首次適應演算法 first fit 演算法思想 將空閒分割槽鏈以位址遞增的順序連線 在進行記憶體分配時,從鏈首開始順序查詢,直到找到一塊分割槽的大小可以滿足需求時,按照該作業的大小,從該分割槽中分配出記憶體,將剩下的空閒分割槽仍然鏈在空閒...
動態分割槽分配演算法
1.首次適應演算法 ff 2.迴圈首次適應演算法 nf 和首次適應演算法的區別就是,在為程序分配記憶體空間的時候,不再是都從鏈首開始查詢,而是從上次找到的空閒的分割槽的下乙個空閒分割槽開始查詢,直到找到乙個能滿足要求的空閒分割槽。3.最佳適應演算法 bf 將所有的空閒空間按其容量從小到大的順序形成一...
動態分割槽分配演算法
主函式 乙個選單欄的形式,可以選擇要執行的演算法。首次適應演算法 每次都從開始往後找滿足條件的分割槽。迴圈首次適應演算法 從前一次找到的地方往後繼續找分割槽。最佳適應演算法 先從小到大排序,找比前乙個大後乙個小的分割槽。1.首次適應演算法 該演算法從空閒分割槽鏈首開始查詢,直至找到乙個能滿足其大小要...