資源簡介
模擬動態分區的分配以及回收 ,首次適應算法,循環首次適應算法以及最佳適應算法。
代碼片段和文件信息
#include?
#include?
#include?
using?namespace?std;
struct?memory
{
struct?memory?*former;
int?address;//地址
int?num;//作業號
int?size;//分配內存大小
int?state;//狀態0表示空閑1表示已分配
struct?memory?*next;
};
typedef?struct?memory?MEMORY;
MEMORY?*mem;
const?int?size_min=10;//內存允許的最小空閑塊的大小
bool?is_optimist=false;//判斷是否是最佳適應算法
void?init();
void?FF();
void?alloc(MEMORY?*MEMORY?*);//首次適應算法分配內存
void?free(MEMORY?*);//首次適應算法回收內存
void?sort(MEMORY?*);//對內存鏈進行排序
void?insert(MEMORY?*MEMORY?*);
void?free_optimist(MEMORY?*);
void?print(MEMORY?*);//打印內存鏈
void?main()
{
??????int?i=0;
???while(1)
???{
??????cout<<(“\nPlease?select?a?number(120)“);
???cout<<(“\n?1--首次適應算法“);
???cout<<“\n?2--最佳適應算法“< ???cout<<“????0--中止程序“< ???cin>>i;
???if(i==1)
???{
????cout<<(“\nThis?is?an?example?for?FF:\n“);
????is_optimist=false;
????init();
????FF();
???}
???else?if(i==2)
???{
?????????cout<<“\nThis?is?an?example?for?optimist?method;\n“;
???is_optimist=true;
???init();
???FF();
??
???}
???else?if(i==0)
???{
????exit(1);
???}
???}
}
void?init()
{
mem=new?MEMORY;
mem->size=640;
//mem->state=0;
mem->former=0;
mem->next=0;
}
void?FF()//首次適應算法
{
int?i;
int?work[]={130601002001406050};//作業序列
//int?assignment;
MEMORY?*running;
for(i=0;i {
????running=(MEMORY?*)malloc(sizeof(MEMORY));//初始化作業
????if(running!=NULL)
????{
??????running->former=NULL;
??????running->address=0;
??????running->num=i+1;
??????running->size=work[i];
??????running->state=0;
??????running->next=NULL;
???//cout<<“作業初始化成功“<num< ???if(is_optimist==true)//最佳適應算法
???{
????//cout<<“xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx“< ????alloc(memrunning);
???}
???else//首次適應算法
???{
???????alloc(memrunning);
???}
??????print(mem);
???cout< ????}
????else
?????cout<<“沒有足夠的內存空間“<
????
????if(rand()%3==1)
????{
???if(is_optimist==false)//首次適應算法
???{
????????free(mem);
???}
???else//最佳適應算法
???{
????::free_optimist(mem);
??????}
????}
}
}
void?free(MEMORY?*ptr)//作業處理完后釋放內存空間
{
????MEMORY?*previous*current;
previous=ptr;
current=previous->next;
while(current!=NULL)
{
???if(current->state==1&&rand()%3==1)
???{
??????????break;
???}
???????????previous=current;
???????????current=current->next;
}
????if(current==NULL)
????{
??????//cout<<“內存中沒有任何作業?。?!“< ???return;
????}
???else?if(current->next==NULL)
???{
??????if(previous->state==0)
???{
???MEMORY?*temp;
???temp=current;
????????previous->size=previous->size+current->size;
????????previous->next=NULL;
????????cout<<“作業?“<<(current->num)<<“釋放?“<<(current->size)<<“k?的空間“< ????????delete?temp;
???print(mem);
???}
???else
???{
????????current->state=0;
????????cout<<“作業?“<<(current->num)<<“釋放?“<<(current->size)<<“k?的空間“< ???print(mem);
???}
???}
???else?if((current->next)->next==NULL)
???{
???if(previous->state==0&&(current->
評論
共有 條評論