版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
實驗目的本實驗主要讓大家熟悉內(nèi)存的各種分配和回收。通過本實驗,幫助大家理解不同的存儲管理方式下,如何實現(xiàn)內(nèi)存空間的分配與回收。實驗內(nèi)容確定內(nèi)存空間分配表;采用最先適應算法完成內(nèi)存空間的分配和回收;編寫主函數(shù)對所做工作進行測試。設計思路先創(chuàng)建好空閑分區(qū)表,用戶輸入作業(yè)的所需分配的空間大小,從表頭依次查詢空閑分區(qū)表,若有適合該作業(yè)的空閑分區(qū),則將該空閑分區(qū)分配與作業(yè)相同大小的分區(qū)給作業(yè),若無則需等待,然后將空閑分區(qū)表按始地址從小到大順序進行排列。帶作業(yè)執(zhí)行完后,釋放該分區(qū),再將空閑分區(qū)表按始地址從小到大順序進行排列。關鍵代碼#include<stdio.h>#defineN5 //空閑區(qū)塊數(shù)typedefstructfreearea(intstartaddress;//空閑分區(qū)始址intsize; //空閑分區(qū)長度intstate; 〃標志位,0表示空,1表示未分配freearea;freeareafreeblock[N]={{87,18,1},{115,25,1},{154,102,1},{300,30,0},{600,100,1}};//給作業(yè)分配主存空間函數(shù)intalloc(intapplysize)(inti,flag=0;〃用來標識是否有滿足作業(yè)的空閑空間,1表示有,0表示無for(i=0;i<N;i++)(if(freeblock[i].state==1&&freeblock[i].size>applysize)(freeblock[i].startaddress二freeblock[i].startaddress+applysize;freeblock[i].size二freeblock[i].size-applysize;flag=1;returnfreeblock[i].startaddress-applysize;}if(freeblock[i].state==1&&freeblock[i].size==applysize)(freeblock[i].state=0;flag=1;returnfreeblock[i].startaddress;}}if(flag==0)return-1;}voidsetfree()(intaddress,size;intflag1=0,flag2=0,flag3=0;//flag1:表示回收區(qū)是否有下鄰空閑區(qū);flag2:表示回收區(qū)是否有上下鄰空閑區(qū);flag3:表示回收區(qū)是否有上鄰空閑區(qū);inti,j;printf("請輸入要釋放區(qū)域的起始地址:\n");scanf("%d",&address);printf("請輸入要釋放區(qū)域的大?。篭n");scanf("%d",&size);for(i=0;i<N;i++)(if(freeblock[i].startaddress==address+size&&freeblock[i].state==1)//回收區(qū)有下鄰空閑區(qū)(size=size+freeblock[i].size;〃向下合并空閑區(qū)flag1=1;for(j=0;j<N;j++)if(freeblock[j].startaddress+freeblock[j].size==address &&freeblock[j].state==1)(freeblock[i].state=0;freeblock[j].size=freeblock[j].size+size;//向上合并空閑區(qū)flag2=1; 〃回收區(qū)有上下鄰空閑區(qū)break;}if(flag2==0)//回收區(qū)無上鄰空閑區(qū)(freeblock[i].startaddress=address;freeblock[i].size二size;break;}}if(flag1==0) //回收區(qū)無下鄰空閑區(qū),檢查其是否有上鄰空閑區(qū)(for(i=0;i<N;i++)if(freeblock[i].startaddress+freeblock[i].size==address &&freeblock[i].state==1)(freeblock[i].size二freeblock[i].size+size;flag3=1;break;}if(flag3==0)//回收區(qū)無上鄰空閑區(qū)for(j=0;j<N;j++)if(freeblock[j].state==0)〃將釋放區(qū)放入空表目中(freeblock[j].startaddress二address;freeblock[j].size二size;freeblock[j].state=1;break;}}}voidadjust()(inti,j;freeareatemp;//中間變量for(i=0;i<N;i++) //將空閑區(qū)按始地址順序在表中排列for(j=0;j<N;j++)if(freeblock[j].startaddress>freeblock[j+1].startaddress)(temp.startaddress=freeblock[j].startaddress;temp.size=freeblock[j].size;temp.state=freeblock[j].state;freeblock[j].startaddress=freeblock[j+1].startaddress;freeblock[j].size=freeblock[j+1].size;freeblock[j].state=freeblock[j+1].state;freeblock[j+1].startaddress=temp.startaddress;freeblock[j+1].size二temp.size;freeblock[j+1].state二temp.state;}for(i=0;i<N;i++)/*將空表目放在表后面*/for(j=0;j<N;j++)if(freeblock[j].state==0&&freeblock[j+1].state==1)(temp.startaddress二freeblock[j].startaddress;temp.size二freeblock[j].size;temp.state二freeblock[j].state;freeblock[j].startaddress二freeblock[j+1].startaddress;freeblock[j].size二freeblock[j+1].size;freeblock[j].state二freeblock[j+1].state;freeblock[j+1].startaddress二temp.startaddress;freeblock[j+1].size二temp.size;freeblock[j+1].state二temp.state;}}〃打印空閑分區(qū)表voidprint()(inti;printf("|start(始址)|size(長度)|state(標志位)|\n〃);for(i=0;i<N;i++)(printf("| %8d | %8d | %8d\n”,freeblock[i].startaddress,freeblock[i].size,freeblock[i].state);}}main()(intapplysize,staAddress;charchoice;printf("\n是否有作業(yè)需要分配空間?(yorn:)\n");choice=getchar();while(choice=='y')(printf("\n空閑分區(qū)表為:\n");adjust();print();printf("\n請輸入需分配的空間大?。篭n");scanf(〃%d〃,&applysize);staAddress二alloc(applysize);adjust();printf("\n經(jīng)過分配后,空閑分配表為:\n");print();if(staAddress==-1)(printf("沒有合適的空閑區(qū),請等待!");}else(printf("\n該作業(yè)在已分配表中的始址為:%d\n”,staA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年上海第二工業(yè)大學單招職業(yè)適應性測試題庫帶答案詳解
- 2026年山東外國語職業(yè)技術(shù)大學單招職業(yè)適應性考試題庫及參考答案詳解1套
- 2026年蘇州市職業(yè)大學單招職業(yè)適應性考試題庫及答案詳解1套
- 2026年重慶科技大學單招職業(yè)技能測試題庫含答案詳解
- 風電場廚師安全培訓課件
- 2026年深圳信息職業(yè)技術(shù)學院單招職業(yè)技能測試題庫及答案詳解一套
- 2026年成都職業(yè)技術(shù)學院單招職業(yè)適應性考試題庫含答案詳解
- 2026年宣化科技職業(yè)學院單招職業(yè)傾向性考試題庫及參考答案詳解一套
- 2026年哈爾濱職業(yè)技術(shù)學院單招職業(yè)技能考試題庫及答案詳解一套
- 2026年信陽航空職業(yè)學院單招綜合素質(zhì)考試題庫及參考答案詳解
- 2025年臨沂市公安機關第四季度招錄警務輔助人員(400名)考試題庫新版
- 2025年公務員考試申論真題模擬環(huán)境治理與污染對策深度解析
- 2025西藏日喀則市薩嘎縣招聘公益性崗位考試筆試參考題庫及答案解析
- 2025福建三明市農(nóng)業(yè)科學研究院招聘專業(yè)技術(shù)人員3人筆試考試備考題庫及答案解析
- 2025年10月自考14107人體工程學.試題及答案
- 2025年南網(wǎng)能源公司社會招聘(62人)考試筆試參考題庫附答案解析
- 《下肢深靜脈血栓形成介入治療護理實踐指南》的解讀2025
- 經(jīng)營區(qū)域保護合同范本
- 醫(yī)療機構(gòu)殯葬整治工作總結(jié)報告
- 2025年滁州輔警招聘考試真題及答案詳解(歷年真題)
- 基于多模型視角下我國A股上市公司財務危機預警的深度剖析與實證檢驗
評論
0/150
提交評論