1.首次適應演算法ff(first fit)2.最佳適應演算法bf(best fit)
基本思想:bf的空閒分割槽表(或空閒分割槽鏈)按空閒區大小的公升序方法組織。分配時,按空閒分割槽表(或空閒分割槽鏈)的先後次序,從頭查詢,找到符合要求的第乙個分割槽。就說明它是最適合的(即最佳的)。大的空閒區可以被保留下來。
最壞適應演算法wf(worst fit)
基本思想:按照空閒分割槽的大小從大到小進行排序,因此每次總是從最大的空閒分割槽開始查詢,如果第乙個空閒分割槽不能滿足,則查詢結束。
#include
#include
#include
#define max 10
int pn;
//分割槽數量
int wn;
//作業數量
int work[max]
;typedef
struct partition
part;
part pt[max]
;//保留原始資料
void
menu()
void
print
(part p)
//列印輸出
}printf
("分割槽號 始址 大小\n");
for(i =
0; i < pn; i++
)printf
("%4d%6d%5d\n"
, p[i]
.id, p[i]
.sa, p[i]
.sz);}
void
copy
(part p[
], part s)
}void
sort
(part p)
//wf、bf演算法使分割槽打亂,因此重新排序
n--;}
}void
judge
(part p)
//判斷作業是否滿足
if(flag)}}
bool check
(part p)
//檢查分割槽記憶體是否越界溢位
return flag;
}void
free
(part p)
//釋放記憶體,實際上是擴充空閒分割槽
else
}voidff(
)//首先適應演算法
n--;}
printf
("位址排序後:\n");
print
(p);
judge
(p);
sort
(p);
copy
(p, pt)
;print
(pt);}
voidbf(
)//最佳適應演算法
n--;}
printf
("大小排序後:\n");
print
(p);
judge
(p);
sort
(p);
copy
(p, pt)
;print
(pt);}
void
init()
flag =
check
(pt);if
(!flag)
}void()
//作業申請
printf
("請選擇:(1)ff (2)bf ");
scanf
("%d"
,&choice);if
(choice ==1)
ff();
if(choice ==2)
bf();
}voidwf(
) n--;}
printf
("分割槽大小排序後:\n");
print
(p);
judge
(p);
sort
(p);
copy
(p, pt)
;print
(p);
}int
main()
動態分割槽分配演算法
動態分割槽分配演算法 一.順序搜尋的動態分割槽分配演算法 1.首次適應演算法 first fit 演算法思想 將空閒分割槽鏈以位址遞增的順序連線 在進行記憶體分配時,從鏈首開始順序查詢,直到找到一塊分割槽的大小可以滿足需求時,按照該作業的大小,從該分割槽中分配出記憶體,將剩下的空閒分割槽仍然鏈在空閒...
動態分割槽分配演算法
1.首次適應演算法 ff 2.迴圈首次適應演算法 nf 和首次適應演算法的區別就是,在為程序分配記憶體空間的時候,不再是都從鏈首開始查詢,而是從上次找到的空閒的分割槽的下乙個空閒分割槽開始查詢,直到找到乙個能滿足要求的空閒分割槽。3.最佳適應演算法 bf 將所有的空閒空間按其容量從小到大的順序形成一...
動態分割槽分配演算法
主函式 乙個選單欄的形式,可以選擇要執行的演算法。首次適應演算法 每次都從開始往後找滿足條件的分割槽。迴圈首次適應演算法 從前一次找到的地方往後繼續找分割槽。最佳適應演算法 先從小到大排序,找比前乙個大後乙個小的分割槽。1.首次適應演算法 該演算法從空閒分割槽鏈首開始查詢,直至找到乙個能滿足其大小要...