對分割槽的分配演算法可以是下面三種演算法之一:
// memory_v1.cpp : 定義控制台應用程式的入口點。
/**name:memory_v1.cpp
*author:wanglin
*created on:2015/11/04
*function:首次適應演算法 可變式分割槽分配,模擬實現分割槽的分配和**過程。
*/#include "stdafx.h"
# include
using
namespace
std;
struct partition //分割槽結構體:起始位址+分割槽長度+標誌
;partition *empty=new partition; //空閒分割槽
partition *busy=new partition;//已分配區
//初始化函式
void init()
/*分配主存
*/void distrimemory()
break;}}
if(isfind)
else
cout
<
cout
<
***主存:4種情況
*/void colletmemory()
}if(p!=null)
//case2**區與插入點的後乙個空閒分割槽f2相鄰接,此時將兩個分割槽合併,p和q相鄰,修改p,刪除q
else
if(((q!=empty)&&(p->addr+p->length)!=m->addr)&&((q->addr+q->length)==p->addr))
//3)**區與插入點的前,後兩個空閒分割槽相鄰接,此時將三個分割槽合併,m,p,q相鄰,修改m,刪除p,q
else
if(((p->addr+p->length)==m->addr)&&((q->addr+q->length)==p->addr))
//4)**區既不與f1相鄰接,又不與f2相鄰接,此時應為**區單獨建立乙個新表項,p掛到空閒表區中m和q之間
else
}else
}//***************=空閒表區修改完畢-***************====
cout
<
cout
<
*顯示主存
(1)顯示空閒分割槽表 empty
(2)顯示已分配表busy
*/void dispmemory()
p=busy;//(2)輸出已分配區表 busy
cout
<
<
<
<
<
}int _tmain(int argc, _tchar* argv)
}return
0;}
【除錯結果】:
3 .最佳適應演算法
/*
分配主存
*/void distrimemory()
}ps=s;//ps是s的前驅
s=s->next;
}if(q->length!=maxlength)//如果找到可以分配的區域
//修改已分配區表,temp掛到busy佇列中
for(q=busy;;p=q,q=q->next)//找到第1個addraddr的結點q,temp插在q前面
if(q->addraddr)break;
if(q==busy)
else
cout<<
"記憶體已分配!"
<
}else
cout<<
"找不到合適大小的區域,記憶體分配失敗!"
<
}
動態分割槽分配 迴圈首次適應演算法 最佳適應演算法
文章待更新 1 採用空閒區表,並增加已分配區表。分配演算法採用最佳適應演算法 記憶體空閒區按照尺寸大小從小到大的排列 和迴圈首次適應演算法,實現記憶體的分配與 include include include include includeusing namespace std int pos,n,s...
首次適應演算法 最佳適應演算法和最差適應演算法
首次適應演算法 first fit 從空閒分割槽表的第乙個表目起查詢該錶,把最先能夠滿足要求的空閒區分配給作業,這種方法的目的在於減少查詢時間。最佳適應演算法 best fit 從全部空閒區中找出能滿足作業要求的,且大小最小的空閒分割槽,這種方法能使碎片盡量小。最差適應演算法 worst fit 它...
首次適應演算法 FF 和迴圈首次適應演算法 NF
原文 ff和nf演算法都是基於順序搜尋的動態分割槽分配演算法,在記憶體中檢索一塊分割槽分配給作業。如果空間大小合適則分配,如果找不到空間則等待。ff演算法按位址遞增從頭掃瞄空閒分割槽,如果找到空閒分割槽大小 作業大小則分配。如果掃瞄完空閒分割槽表都沒有找到分割槽,則分配失敗。nf演算法和ff演算法類...