版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、主存儲器空間的分配和回收直接進(jìn)行源代碼的編寫:/*作業(yè)名用1,2,3,···表示*/#include<iostream>#include<list>using namespace std;#define TOTLE_LEFT 108 /除系統(tǒng)占用內(nèi)存外的剩余內(nèi)存#define first_free 14 /第一塊空閑區(qū)的起始地址#define first_size 12 /第一塊空閑區(qū)的大小#define sec_free 32 /第二塊空閑區(qū)的起始地址#define sec_size 96 /第二塊空閑區(qū)的大小#define first_
2、job_size 3#define sec_job_size 23#define third_job_size 3/空閑分區(qū)表結(jié)點 struct Freeint start;int length;Free(int s,int l);Free:Free(int s,int l)start = s;length = 1;/已分配分區(qū)表結(jié)點struct Taskint name;int start;int length;Task(int n,int s,int l);Task:Task(int n,int s,int l) name = n; start = s; length = l;/聲明空閑分
3、區(qū)表list<Free*>free_list;list<Task*>Task_list;/分配可用的起始地址int get_free(int size) int start = -1; /查找適當(dāng)?shù)目臻e分區(qū) list<Free*>:iterator it = free_list.begin(); bool find = false; while(it!=free_list.end() if(*it)->length>=size) find = true; start = (*it)->start; /大于,就分割,把低地址分配出去 if(*
4、it)->length>size) (*it)->start += size; (*it)->length -= size; /等于,就從空閑區(qū)中刪除 else free_list.erase(it); break; /找到就跳出循環(huán) it +; return start;void do_request(int name,int size)if(name=0) cout<<”申請不合法!非法的作業(yè)名!”<<endl; return;if(size>TOTLE_LEFT) cout<<”申請不合法!超出了最大可用內(nèi)存!”<&
5、lt;endl; return; /查找是否已存在同名作業(yè)bool find = false;list<Task*>:iterator it = task_list.begin();while(it!=task_list.end() if(*it)->name =name) find = true; break; it+;if(find) cout<<”此作業(yè)已存在!”<<endl; return;/從空閑分區(qū)選擇合適的空間int start = get_free(size);/未找到合適空間if(start =-1) cout<<”系統(tǒng)內(nèi)
6、存不足!作業(yè)等待!”<<endl; return;Task * ta = new Task(name,start,size);task_list.push_back(ta);cout<<”作業(yè)申請內(nèi)存成功!”<<endl;/插入到空閑分區(qū)表,起始地址從小到大void free_task(int start,int length) /查找要插入的位置 list<Free*>:iterator init_it,last_it; last_it = init_it; list<Free*>:iterator it = free_list.b
7、egin(); while(it! = free_list.end() if(*it)->start>start) break; last_it = it; it +; bool link_prev = false; bool link_next = false; /有前一個小時 if(last_it! = init_it) if(*last_it)->start+(*last_it)->length = start) link_prev = true; /有后一個小時 if(it! = free_list.end() if(start + length =(*it)-
8、>start) link_next = true; /與前后都相連 if(link_prev&&link_next) (*last_it)->length += length + (*it) ->length; free_list.erase(it); /只與前相連 else if(link_prev) (*last_it)->length += length; /只與后相連 else if(link_next) (*it)->start = start; (*it)->length += length; /前后都不相連 else Free
9、*fr = new Free(start,length); Free_list.insert(it,fr); void do_revoke(int name)if(name =0) cout<<”錯誤!不能回收系統(tǒng)內(nèi)存!”<<endl; return;/查找要回收的作業(yè)是否存在bool find = false; list<Task*>:iterator it = task_list.begin(); while(it! = task_list,end() if(*it)->name = name) find = true; break; it +;
10、if(!find) cout<<”錯誤!要回收的作業(yè)不存在!”<<endl; return;free_task(*it)->start,(*it)->length);task_list.erase(it);cout<<”回收作業(yè)占用內(nèi)存成功!”<<endl;void print_task() cout<<”作業(yè)名稱 起始地址 大小”<<endl; for(list<Task*>:iterator it = task_list.begin();it!=task_list.end();it+) cout
11、<<(*it)->name<<” <<(*it)->start<<” <<(*it)->length<<endl; void print_free() cout<<”以下是空閑分區(qū)表的狀態(tài)”<<endl; <<”起始地址 大小”<<endl; for(list<Free*>:iterator it = free_list.begin();it! = free_list.end();it +) cout<<(*it)->start
12、<<” <<(*it)->length<<endl; int main(0 /把系統(tǒng)占用后剩余的內(nèi)存空間計入空閑分區(qū)表 Free *fr1 = new Free(first_free,first_size); free_list.push_back(fr1); Free *fr = new Free(sec_free,sec_size); free_list.push_back(fr); Task *ta = new Task(1,26,first_job_size); task_list.push_back(ta); Task *ta1 = new
13、Task(3,29,third_job_size); task_list.push_back(ta1); Task *ta2 = new Task(2,128,sec_job_size); task_list.push_back(ta2); print_free(): bool quit = false; while(!quit) cout<<”選擇要進(jìn)行的操作:1.申請內(nèi)存2.回收內(nèi)存3.查看作業(yè)”; int op; cin>>op; if(op=1) int name; int size; cout<<”請輸入作業(yè)名及占用空間大小:”; cin>>name; cin>>size; do_request(name,size); print_free(); else if(op=2) int name; cout<<”請輸入要回收的作業(yè)名:”; cin>>name; do_re
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年工程地質(zhì)三維建模的行業(yè)標(biāo)準(zhǔn)
- 2026年地質(zhì)三維建模在災(zāi)害預(yù)警中的應(yīng)用
- 2026上半年貴州事業(yè)單位聯(lián)考正安縣招聘65人筆試備考試題及答案解析
- 2026年購房者行為模式的變化分析
- 2026年自清潔建筑材料的創(chuàng)新與應(yīng)用案例
- 2025年海南省行政管理崗筆試及答案
- 2025年孝南人事考試及答案
- 2026山東濰坊市公立三甲醫(yī)院病房護(hù)士招聘16人考試備考題庫及答案解析
- 2025年裸考教資筆試題目及答案
- 2025年招聘筆試往年真題及答案
- (人教A版)必修一高一數(shù)學(xué)上冊同步分層練習(xí)1.3 并集與交集第1課時(原卷版)
- 完整銀行貸款合同5篇
- 2025版地暖施工項目進(jìn)度管理與結(jié)算合同
- 2025年成都市中考化學(xué)試題卷(含答案解析)
- 2025年事業(yè)單位公開招聘考試(D類)《職業(yè)能力傾向測驗》新版真題卷(附詳細(xì)解析)
- 2025年尾礦綜合利用技術(shù)突破與生態(tài)修復(fù)技術(shù)協(xié)同創(chuàng)新研究
- 評定與追溯管理制度
- 武漢科技大學(xué)c語言期末試卷及答案
- T/CAS 612-2022碳中和管理體系要求
- 山東師范大學(xué)期末考試大學(xué)英語(本科)題庫含答案
- 鋰電行業(yè)異物管控
評論
0/150
提交評論