記憶體分配之動態分割槽分配的三種演算法

2021-10-24 07:22:38 字數 1825 閱讀 4875

首次適應演算法(first-fit):

從空閒分割槽表的第乙個表目起查詢該錶,把最先能夠滿足要求的空閒區分配給作業,這種方法的目的在於減少查詢時間。

最佳適應演算法(best-fit):從全部空閒區中找出能滿足作業要求的,且大小最小的空閒分割槽,這種方法能使碎片盡量小。

最差適應演算法(worst-fit):它從全部空閒區中找出能滿足作業要求的、且大小最大的空閒分割槽,從而使煉表中的節點大小趨於均勻。

下面看乙個例項:

given five memory partitions of 100 kb, 500 kb, 200 kb, 300 kb, and 600 kb (in order), how would each of the first-fit, best-fit, and worst-fit algorithms place processes of 212 kb, 417 kb, 112 kb, and 426 kb (in order)? which algorithm makes the most efficient use of memory?

首次適應演算法:

為212k分配空間:

依次找尋,找到第乙個大於212k的空閒區;

找到第二個空閒區500k>212k,分配給212k,剩餘288k空閒區;

為417k分配空間:

依次找尋,找到第乙個大於417k的空閒區;

找到第五個空閒區600k>417k,分配給417k,剩餘183k空閒區

為112k分配空間:

依次找尋,找到第乙個大於112k的空閒區;

找到第二個空閒區288k>112k,分配給112k,剩餘176k空閒區

為426k分配空間:

依次找尋,找到第乙個大於426k的空閒區;

未找到,此作業將等待釋放空間

最佳適應演算法

為212k分配空間:

找到第乙個跟212k大小最接近的空閒區

找到第四個空閒區300>212k,剩餘88k空閒區

為417k分配空間:

找到第乙個跟417k大小最接近的空閒區

找到第二個空閒區500>417,剩餘83k空閒區

為112k分配空間:

找到第乙個跟112k大小最接近的空閒區

找到第三個空閒區200>112k,剩餘88k空閒區

為426k分配空間:

找到第乙個跟426大小最接近的空閒區

找到第五個空閒區600k>426,剩餘74k空閒區

最壞適應演算法

為212k分配空間:

找到第乙個大小最大的空閒區

找到第五個空閒區600>212k,剩餘388k空閒區

為417k分配空間:

找到第乙個大小最大的空閒區

找到第二個空閒區500>417,剩餘83k空閒區

為112k分配空間:

找到第乙個大小最大的空閒區

找到第三個空閒區388>112k,剩餘276k空閒區

為426k分配空間:

找到第乙個大小最大的空閒區

達到大小最大的空閒區300k<426k,所以不分配

answer

free partition

100  

500  

200  

300  

not satisfied

first-fit   

212,112    

best-fit

worst-fit

212,112  

記憶體動態分割槽分配 動態記憶體分配介紹

c語言的記憶體分配方式 堆和棧 基於快取的儲存器層次結構 當c程式在執行過程中需要額外虛擬記憶體時,可以使用動態記憶體分配器 dynamic memory allocator 動態記憶體分配器維護著乙個程序的虛擬記憶體區域,成為堆 heap 假設堆是乙個請求二進位制零的區域,它緊接在未初始化的資料區...

記憶體管理(1) 動態分割槽分配策略

1 最先匹配 分配n個位元組,使用第乙個可用空間比n大的空閒區 原理 空閒分割槽列表按照位址順序排序 分配過程中,搜尋第乙個適合的分割槽 釋放分割槽時,檢查是否可與臨近的空閒分割槽合併,優點 簡單 在高位址空間有大塊的空閒分割槽 缺點 外部碎片 分配大塊使較慢 2 最佳匹配 分配n個位元組時,查詢並...

記憶體分配的三種方式

把所有的點都說到,才能說明你有足夠的專案經驗,在實際工作的時候不會因為一些小問題而產生一些嚴重的bug,也證明了你有實力勝任這份工作。要回答這個問題,我們必須先要理解c 的記憶體管理方式,需要站在記憶體四區的角度去審視一下 這樣整個理解了記憶體分配的方式,回答的時候就只需要注意一些細節了。寫乙個例子...