動態分割槽 首次適應 最佳適應

2021-07-06 10:42:02 字數 2449 閱讀 2326

對分割槽的分配演算法可以是下面三種演算法之一:

// 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演算法類...