版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p><b> 一、概述1</b></p><p><b> 1、設(shè)計(jì)目的1</b></p><p><b> 2、開發(fā)環(huán)境1</b></p><p><b> 二、設(shè)計(jì)要求1
2、</b></p><p> 三、實(shí)驗(yàn)基本原理1</p><p><b> 四、程序流程圖2</b></p><p> 1、整體程序流程圖3</p><p> 2、內(nèi)存分配allocate()流程圖4</p><p><b> 五、源程序5</b>
3、;</p><p><b> 1、數(shù)據(jù)結(jié)構(gòu)5</b></p><p> 2、主要功能函數(shù)5</p><p><b> 3、源程序代碼6</b></p><p><b> 六、運(yùn)行結(jié)果16</b></p><p> 1、測試用例與程序運(yùn)行
4、結(jié)果截圖16</p><p> 2、內(nèi)存分配正確測試18</p><p> 3、內(nèi)存回收錯(cuò)誤測試18</p><p> 4、內(nèi)存回收正確測試用例18</p><p><b> 七、總結(jié)21</b></p><p><b> 八、參考文獻(xiàn)21</b><
5、;/p><p><b> 一、概述</b></p><p><b> 1、設(shè)計(jì)目的</b></p><p> 了解操作系統(tǒng)的內(nèi)存分配的方法</p><p><b> 2、開發(fā)環(huán)境</b></p><p> WINDOWS環(huán)境 Visual C+
6、+6.0 </p><p><b> 二、設(shè)計(jì)要求</b></p><p> 定義一個(gè)自由存儲塊鏈表,按塊地址排序,表中記錄塊的大小。當(dāng)請求分配內(nèi)存時(shí),掃描自由存儲塊鏈表,知道找到一個(gè)足夠大的可供分配的內(nèi)存塊,若找到的塊的大小正好等于所請求的大小時(shí),就把這一塊從自由鏈表中取下來,返回給申請者。若找到的塊太大,即對其分割,并從該塊的高地址不分往低地址部分分割,取出大
7、小合適的塊返還給申請者,愈小的低地址部分留在鏈表中。若找不到足夠大的塊,就從操作系統(tǒng)中請求另外一個(gè)足夠大的內(nèi)存區(qū)域,并把它連接到自由塊鏈表中,然后再繼續(xù)搜索。</p><p> 釋放存儲塊也要搜索自由鏈表,目的是找到適當(dāng)?shù)奈恢脤⒁尫诺膲K插進(jìn)去,如果被釋放的塊的任何一邊與鏈表中的某一塊臨接,即對其進(jìn)行合并操作,直到?jīng)]有合并的臨接塊為止,這樣可以防止存儲空間變得零碎。。 </p><
8、p><b> 三、實(shí)驗(yàn)基本原理</b></p><p> 分區(qū)存儲管理是給內(nèi)存中的進(jìn)程劃分適當(dāng)大小的存儲區(qū),以連續(xù)存儲各進(jìn)程的程序和數(shù)據(jù),使各進(jìn)程能并發(fā)地執(zhí)行。最優(yōu)適應(yīng)分配算法掃描整個(gè)未分配區(qū)表或鏈表,從空閑區(qū)中挑選一個(gè)能滿足用戶進(jìn)程要求的最小分區(qū)進(jìn)行分配。</p><p> 在可變分區(qū)模式下,在系統(tǒng)初啟且用戶作業(yè)尚未裝入主存儲器之前,整個(gè)用戶區(qū)是一個(gè)大空
9、閑分區(qū),隨著作業(yè)的裝入和撤離,主存空間被分成許多分區(qū),有的分區(qū)被占用,而有的分區(qū)時(shí)空閑的。為了方便主存空間的分配和去配,用于管理的數(shù)據(jù)結(jié)構(gòu)可由兩張表組成:“已分配區(qū)表”和“未分配區(qū)表”。在“未分配表中”將空閑區(qū)按長度遞增順序排列,當(dāng)裝入新作業(yè)時(shí),從未分配區(qū)表中挑選一個(gè)能滿足用戶進(jìn)程要求的最小分區(qū)進(jìn)行分配。這時(shí)從已分配表中找出一個(gè)空欄目登記新作業(yè)的起始地址和占用長度,同時(shí)修改未分配區(qū)表中空閑區(qū)的長度和起始地址。當(dāng)作業(yè)撤離時(shí)已分配區(qū)表中的相
10、應(yīng)狀態(tài)變?yōu)椤翱铡?,而將收回的分區(qū)登記到未分配區(qū)表中,若有相鄰空閑區(qū)再將其連接后登記。可變分區(qū)的回收算法較為復(fù)雜,當(dāng)一個(gè)作業(yè)撤離時(shí),可分為4種情況:其臨近都有作業(yè)(A和B),其一邊有作業(yè)(A或B),其兩邊均為空閑區(qū)。尤其重要的是,在程序中利用“ new 類型T(初值列表)”申請分配用于存放T類型數(shù)據(jù)的內(nèi)存空間,利用 “delete 指針名”釋放指針?biāo)赶虻膬?nèi)存空間。 </p><p><b> 四、程序
11、流程圖</b></p><p><b> 1、整體程序流程圖</b></p><p> 2、內(nèi)存分配allocate()流程圖</p><p><b> 五、源程序</b></p><p><b> 1、數(shù)據(jù)結(jié)構(gòu)</b></p><p&g
12、t;<b> ?。?)內(nèi)存塊</b></p><p> struct space //定義內(nèi)存空間結(jié)構(gòu)體</p><p><b> {</b></p><p> long startaddress;</p><p&g
13、t; long length;</p><p> struct space *next;</p><p><b> };</b></p><p> space *pbc; </p><p><b> ?。?)、作業(yè)塊</b></p&
14、gt;<p> struct work //定義進(jìn)程結(jié)構(gòu)體 </p><p><b> {</b></p><p> char name[20];</p><p> long startaddress;</p&g
15、t;<p> long length;</p><p> struct work *next;</p><p><b> };</b></p><p> work *S; </p><p><b> 2、主要功能函數(shù)</b></p><p> al
16、locate() : 實(shí)現(xiàn)內(nèi)存分配,并在當(dāng)中調(diào)用display(pbc),以及display(S) 兩個(gè)函數(shù)顯示內(nèi)存分配完后的空閑塊鏈表和進(jìn)程鏈表情況。</p><p> requireback(): 實(shí)現(xiàn)內(nèi)存回收,在滿足情況的條件下調(diào)用allocate()對用戶申請的內(nèi)存塊進(jìn)行回收并在當(dāng)中調(diào)用display(pbc),以及display(S)顯示內(nèi)存回收完后的空閑塊鏈表和進(jìn)程鏈表情況。</p>
17、<p> callback(): 按內(nèi)存回收時(shí)的四種情況對內(nèi)存進(jìn)行回收。</p><p> display(pbc): 對空閑塊鏈表中的空閑塊進(jìn)行從小到大排序并顯示空閑鏈情況。</p><p> display(S): 對進(jìn)程鏈表中的進(jìn)程進(jìn)行從小到大排序并顯示進(jìn)程鏈情況。</p><p> main(): 創(chuàng)建并初始化空閑塊鏈
18、表和進(jìn)程鏈鏈表,用戶選擇操作功能</p><p><b> 3、源程序代碼</b></p><p> #include <iostream.h></p><p> #include<string.h></p><p> #include <stdio.h></p>
19、<p> struct space //定義內(nèi)存空間結(jié)構(gòu)體</p><p><b> {</b></p><p> long startaddress;</p><p> long length;</p><
20、p> struct space *next;</p><p><b> };</b></p><p> space *pbc; //申明結(jié)構(gòu)體指針</p><p> struct work
21、 //定義進(jìn)程結(jié)構(gòu)體</p><p><b> {</b></p><p> char name[20];</p><p> long startaddress;</p><p> long length;</p><p>
22、 struct work *next;</p><p><b> };</b></p><p> work *S; //申明結(jié)構(gòu)體指針</p><p> void callback(work *r);
23、 //申明callback()函數(shù)原型</p><p> void display(space *pbc); //申明display()函數(shù)原型</p><p> void display(work *S); </p><p> void
24、allocate() //內(nèi)存分配函數(shù)實(shí)現(xiàn) </p><p><b> { </b></p><p> work *q,*w;</p><p> q=new work; //申請分配用于存放wor
25、k類型的數(shù)據(jù)的內(nèi)存空間</p><p> cout<<"請輸入進(jìn)程名和占用空間大小:"<<endl;</p><p> cin>>q->name>>q->length;</p><p> if(q->length<=0)
26、 //判斷輸入進(jìn)程的合法性</p><p><b> { </b></p><p> cout<<"進(jìn)程錯(cuò)誤."<<endl;</p><p> delete q; //進(jìn)程錯(cuò)誤,釋放內(nèi)存空
27、間</p><p><b> return;</b></p><p><b> }</b></p><p><b> w=S;</b></p><p> while(w->next!=NULL)
28、 //進(jìn)程鏈不為空</p><p><b> {</b></p><p> if(strcmp(w->next->name, q->name)==0) //判斷進(jìn)程名是否已經(jīng)存在</p><p><b> {</b></p><p> co
29、ut<<"此進(jìn)程名已經(jīng)存在!"<<endl; //進(jìn)程名已經(jīng)存在,返回</p><p><b> return;</b></p><p><b> } </b></p><p> w=w->next;</p><p>
30、;<b> }</b></p><p> if(w->next==NULL) //進(jìn)程名不存在,繼續(xù)進(jìn)行內(nèi)存分配</p><p> { space *p,*r; </p><p><b> p=pbc;</b></p><p>&l
31、t;b> r=p;</b></p><p> while(p->next!=NULL&&p->next->length<q->length) //在空間鏈中尋找第一個(gè)大于所輸入的進(jìn)程大小的空閑塊</p><p><b> {</b></p><p><b> r=
32、p;</b></p><p> p=p->next;</p><p><b> } </b></p><p> if(p->next==NULL) //空閑鏈中無大于所輸入進(jìn)程空間大小的空閑塊</p><p><b> {</b><
33、/p><p> cout<<"空間不足,分配失敗!"<<endl;</p><p> delete q; //空間不足,分配失敗,釋放空間</p><p><b> return;</b></p><p>&l
34、t;b> }</b></p><p> else //找到第一個(gè)滿足要求的空閑塊</p><p><b> { </b></p><p> q->startaddress=p->next->startaddress; //將
35、該空閑塊的起始地址賦給所輸入的進(jìn)程</p><p> q->next=S->next; </p><p> S->next=q; //將所輸入的進(jìn)程插入work鏈?zhǔn)住?lt;/p><p> p->next->len
36、gth-=q->length; </p><p> if(p->next->length!=0) //該空閑塊空間有剩余,改變該空閑塊的起始地址</p><p> p->next->startaddress+=q->length; </p><p>
37、else //該空閑塊空間無剩余</p><p><b> {</b></p><p> if(p->next->next!=NULL) //該空閑塊不處于空閑鏈鏈尾</p><p> p->
38、next=p->next->next; //刪除該空閑塊,修改空閑鏈</p><p> else </p><p><b> {</b></p><
39、p> r->next=NULL; //該空閑塊處于空閑鏈鏈尾,修改空閑鏈</p><p> delete p->next; //釋放該空閑塊的空間</p><p><b> } </b></p><p><b>
40、 } </b></p><p><b> }</b></p><p><b> }</b></p><p> display(pbc); //顯示空閑鏈情況</p><p> di
41、splay(S); //顯示進(jìn)程鏈情況</p><p> } </p><p> void requireback(){ //用戶申請進(jìn)程回收函數(shù)
42、 </p><p> char name[20];</p><p> cout<<"輸入要回收的進(jìn)程名:";</p><p> cin>>name;</p><p><b> work *p;</b></p><p><b> p=S
43、;</b></p><p> while(p->next!=NULL) //進(jìn)程鏈不為空</p><p><b> {</b></p><p> if(strcmp(p->next->name, name)==0) //尋找與用
44、戶要求回收的進(jìn)程名相同的進(jìn)程</p><p><b> {</b></p><p> callback(p); //調(diào)用進(jìn)程回收函數(shù),回收進(jìn)程</p><p><b> return;</b></p><p><b> }
45、 </b></p><p> p=p->next;</p><p><b> }</b></p><p> if(p->next==NULL)</p><p> cout<<"此進(jìn)程不存在!"<<endl; //進(jìn)程鏈中無與用戶要求回收的進(jìn)程名相
46、同的進(jìn)程</p><p><b> } </b></p><p> void callback(work *t) //利用最佳適應(yīng)算法實(shí)現(xiàn)進(jìn)程回收</p><p><b> { </b></p><p><b>
47、 work *w; </b></p><p> w=t->next; </p><p> space *p=NULL,*q=NULL; </p><p><b> long n;</b></p><p> n=w->length; </p><p> if(pb
48、c->next==NULL) //空閑鏈為空 </p><p><b> {</b></p><p> space *f=new space; //申請分配用于存放space類型的數(shù)據(jù)的內(nèi)
49、存空間,并將首地址賦給指針f</p><p> f->startaddress=0; //初始該空間首地址 </p><p> f->length=n; //將所要回收的進(jìn)程大小賦給該空間</p&g
50、t;<p> f->next=NULL; </p><p> pbc->next=f; //將該空間塊插入空閑鏈中</p><p> t->next=w->next;</p><p>
51、 delete w; //釋放空間</p><p> cout<<"回收完畢!"<<endl; </p><p> display(pbc); //顯示回收完后
52、的空閑鏈</p><p> display(S); //顯示回收完后的進(jìn)程鏈</p><p><b> return;</b></p><p><b> } </b></p><p> p=pbc->n
53、ext; </p><p> while(p!=NULL&&p->startaddress<w->startaddress) //在空閑鏈表中尋找插入新的空閑區(qū)的合適位置 </p><p><b> {</b></p><
54、p><b> q=p;</b></p><p> p=p->next; </p><p><b> }</b></p><p> if((q==NULL)&&(w->startaddress+n==p->startaddress)) </p><p&
55、gt;<b> { </b></p><p> p->startaddress-=n; //修改下鄰起始地址</p><p> p->length+=n; //將該空閑塊與下鄰合并</p>
56、<p> t->next=w->next; //修改進(jìn)程鏈,刪除進(jìn)程鏈中所要回收的進(jìn)程</p><p> delete w; //釋放空間</p><p> cout<<"回收完畢!"<
57、<endl; </p><p> display(pbc); //顯示回收后的空閑鏈</p><p> display(S); //顯示回收后的進(jìn)程鏈</p>
58、<p><b> return;</b></p><p><b> }</b></p><p> if((q==NULL)&&(w->startaddress+n!=p->startaddress)) //q為空,且該空間的結(jié)束地址不是下臨的結(jié)束地址</p><p><
59、;b> { </b></p><p> space *sp=new space; //申請分配用于存放space類型的數(shù)據(jù)的內(nèi)存空間,并將首地址賦給指針sp</p><p> sp->startaddress=w->startaddress; //將該空間的起始地址賦給sp
60、</p><p> sp->length=n; //將該空間的大小賦給sp</p><p> sp->next=pbc->next; //將sp插入空閑鏈中</p><p> pbc->next=s
61、p; </p><p> t->next=w->next; //修改進(jìn)程鏈,刪除所回收的進(jìn)程</p><p><b> delete w;</b></p><p> cout<<"回收完畢!"<<endl; </p>
62、<p> display(pbc); //顯示回收后的空閑鏈</p><p> display(S); //顯示回收后的進(jìn)程鏈 </p><p>
63、return; </p><p><b> }</b></p><p> if((q!=NULL)&&(q->startaddress+q->length==w->startaddress)&&(w->startaddress+n==p->start address))
64、 //上下均空</p><p><b> {</b></p><p> q->next=p->next; //修改空閑鏈</p><p>
65、 q->length=q->length+p->length+n; //將該空閑塊與上下鄰合并</p><p> t->next=w->next; //修改進(jìn)程鏈,刪除所回收的進(jìn)程</p><p> delete w;
66、 //釋放空間</p><p><b> }</b></p><p> else if((q!=NULL)&&(w->startaddress+n==p->startaddress)) //下鄰空</p><p><b>
67、; {</b></p><p> p->startaddress-=n; //修改下鄰起始地址</p><p> p->length+=n; //將該空閑快與下鄰合并</p><p> t-&
68、gt;next=w->next;</p><p><b> delete w;</b></p><p><b> }</b></p><p> else if((q!=NULL)&&(q->startaddress+q->length==w->startaddress))
69、 //上鄰為空</p><p><b> {</b></p><p> q->length+=n; //改變上鄰的大小,將兩個(gè)空閑塊合并</p><p> t->next=w->next; //修改進(jìn)程鏈,刪除所
70、回收的進(jìn)程</p><p> delete w; //釋放空間</p><p><b> }</b></p><p> else
71、 //上下鄰都不為空</p><p><b> {</b></p><p> space *sp=new space; //申請分配用于存放space類型的數(shù)據(jù)的內(nèi)存空間,并將首地址賦給指針sp</p><p> sp->startaddress=w->startaddress;
72、 //將所回收的進(jìn)程首地址賦給sp</p><p> sp->length=n; //將縮回收的進(jìn)程大小賦給sp</p><p> sp->next=pbc->next; </p><p> pbc-&
73、gt;next=sp; //將sp插入空閑鏈鏈?zhǔn)?</p><p> t->next=w->next; //修改進(jìn)程鏈,刪除所回收的進(jìn)程
74、 </p><p> delete w; //釋放空間</p><p><b> } </b></p><p> cout<<"回收完畢!"<<endl; </p><p> dis
75、play(pbc); //顯示回收后的空閑塊</p><p> display(S); //顯示回收后的進(jìn)程鏈</p><p> space *sa,*sd,*sf,*sk;
76、 </p><p> sa=pbc->next; //空閑塊從小到大排序 </p><p> pbc->next=NULL;</p><p> while(sa!=NULL)<
77、;/p><p> {sd=pbc;sf=pbc->next;</p><p> while((sf!=NULL)&&(sf->length<sa->length))</p><p> {sd=sf;sf=sf->next;}</p><p> sk=sa->next;</p>
78、<p> if(sf==NULL)</p><p> {sd->next=sa;sa->next=NULL;}</p><p> else {sa->next=sf;sd->next=sa;}</p><p> sa=sk;} <
79、;/p><p><b> } </b></p><p> void display(space *pbc) //空閑鏈顯示函數(shù)實(shí)現(xiàn)</p><p><b> {</b></p><p> space *p,*q,*r,*e
80、; </p><p> p=pbc->next; //空閑塊從小到大排序 </p><p> pbc->next=NULL;
81、</p><p> while(p!=NULL)</p><p> {r=pbc;q=pbc->next;</p><p> while((q!=NULL)&&(q->startaddress<p->startaddress)) </p><p> {r=q;q=q->next;
82、}</p><p> e=p->next;</p><p> if(q==NULL)</p><p> {r->next=p;p->next=NULL;}</p><p> else {p->next=q;r->next=p;}</p><p><b> p=e;}&l
83、t;/b></p><p> space *t=pbc->next;</p><p> cout<<endl<<"可用空閑區(qū):"<<endl; </p><p> if(t==NULL)</p><p> { cout<<"無空閑區(qū)了.&q
84、uot;<<endl; return;} </p><p> while(t!=NULL)</p><p><b> { </b></p><p> cout<<"起始地址:"<<t->startaddress<<"長度:"<<t-&
85、gt;length<<endl; </p><p> t=t->next;</p><p><b> }</b></p><p><b> } </b></p><p> void display(work *S)
86、 //進(jìn)程鏈顯示函數(shù)實(shí)現(xiàn)</p><p><b> {</b></p><p> work *p,*q,*r,*f; </p><p> p=S->next;
87、 //進(jìn)程鏈表排序</p><p> S->next=NULL;</p><p> while(p!=NULL)</p><p> {r=S;q=S->next;</p><p> while((q!=NULL)&&(q->startaddress<p->
88、startaddress)) //按從小到大</p><p> {r=q;q=q->next;}</p><p> f=p->next;</p><p> if(q==NULL)</p><p> {r->next=p;p->next=NULL;}</p><p
89、> else {p->next=q;r->next=p;}</p><p><b> p=f;} </b></p><p> work *t=S->next;</p><p> cout<<endl<<"已分配進(jìn)程:"<<endl; </p>
90、<p> if(t==NULL)</p><p> { cout<<"內(nèi)存中無進(jìn)程."<<endl; return;} </p><p> while(t!=NULL)</p><p><b> {</b></p><p> cout<<&
91、quot;進(jìn)程名:"<<t->name<<"起始地址:"<<t->startaddress<<"長度:"<<t->length<<endl; </p><p> t=t->next;</p><p><b> }</b>
92、</p><p> cout<<endl;</p><p><b> } </b></p><p> void main()</p><p><b> {</b></p><p> pbc=new space;
93、 //申請分配用于存放space類型的數(shù)據(jù)的內(nèi)存空間,并將首地址賦給指針pbc</p><p> space *p=new space; //申請分配用于存放space類型的數(shù)據(jù)的內(nèi)存空間,并將首地址賦給指針p</p><p> p->startaddress=0;
94、 //初始化p的起始地址</p><p> p->length=130; //初始花p的大小</p><p> p->next=NULL; </p>&l
95、t;p> pbc->next=p; //將pbc作為p的頭指針,創(chuàng)建空閑鏈</p><p> S=new work; //創(chuàng)建進(jìn)程鏈頭指針</p><p> S->next=NULL;</p><p
96、><b> int b;</b></p><p> cout<<" "<<" "<<" "<<" "<<" "<<" "<<" "<<"
97、"<<" "<<" "</p><p> <<" "<<" "<<" "<<" "<<" "<<"·"<<"最佳適應(yīng)
98、算法模擬內(nèi)存分配與回收"<<"·"<<endl; </p><p> cout<<endl;</p><p> cout<<"·············
99、3;···············"<<endl;</p><p> cout<<"功能選項(xiàng):"<<" "<<" "<<"
100、"<<" "<<" "<<" "<<"0:分配內(nèi)存"<<" "<<" "</p><p> <<" "<<" "<<" &qu
101、ot;<<"1:回收內(nèi)存"<<" "<<" "<<" "<<" "<<" "<<"2:退出"<<endl; </p><p> cout<<"·&
102、#183;···························"<<endl;</p><p> while(1){
103、 //循環(huán)選擇功能</p><p> cout<<endl<<"請按鍵選擇:";</p><p><b> cin>>b;</b></p><p><b> switch(b
104、)</b></p><p><b> {</b></p><p> case 0: allocate(); break; //功能0:進(jìn)行內(nèi)存分配</p><p> case 1: requireback(); break; //功能1:
105、 進(jìn)行內(nèi)存回收</p><p> case 2: ;break; //功能2: 退出</p><p><b> } </b></p><p><b> }</b></p><p><b> } <
106、;/b></p><p><b> 六、運(yùn)行結(jié)果</b></p><p> 1、測試用例與程序運(yùn)行結(jié)果截圖</p><p> 1.1、內(nèi)存分配容錯(cuò)測試</p><p> 圖1 程序運(yùn)行結(jié)果:輸入進(jìn)程占用空間大小小于零</p><p> 1.2所輸入的進(jìn)程名已經(jīng)存在</p
107、><p> 圖2 程序運(yùn)行結(jié)果:所輸入的進(jìn)程名已經(jīng)存在</p><p> 1.3所申請的空間過大,空間不足</p><p> 圖3 程序運(yùn)行結(jié)果:所申請的空間過大,空間不足</p><p> 2、內(nèi)存分配正確測試</p><p> 圖4 程序運(yùn)行結(jié)果:分配成功</p><p&
108、gt; 3、內(nèi)存回收錯(cuò)誤測試</p><p> 圖5 程序運(yùn)行結(jié)果:所要回收的進(jìn)程不存在</p><p> 4、內(nèi)存回收正確測試用例</p><p> 4.1 上下鄰均不為空</p><p> 圖6 程序運(yùn)行結(jié)果:上下鄰均不為空</p><p><b> 4.2 下鄰為空</b&
109、gt;</p><p> 圖7 程序運(yùn)行結(jié)果:下鄰為空</p><p><b> 4.3 上鄰為空</b></p><p> 圖8 程序運(yùn)行結(jié)果:上鄰為空</p><p><b> 4.4上下鄰均為空</b></p><p> 圖9 程序運(yùn)行結(jié)
110、果:上下鄰均為空</p><p><b> 七、總結(jié)</b></p><p> 在做課程設(shè)計(jì)的過程中我遇到了不少問題,比如鏈表指針部分就很容易搞混,而且很多地方不容易考慮全面,比如內(nèi)存回收時(shí)空閑區(qū)的合并部分,要考慮釋放的內(nèi)存空間前后是否為空閑區(qū),若是,如何來合并,如果釋放的內(nèi)存塊是鏈表的最后一個(gè),或是鏈表的倒數(shù)第二個(gè),則這兩種情況要單獨(dú)討論,因?yàn)楫?dāng)內(nèi)存空間釋放后存
111、在一個(gè)后向指針的定義問題,若是在鏈表中間,則可以直接指定,但若是在鏈表的末尾,則要指定為NULL,另外若用的是最佳適應(yīng)算法,進(jìn)行內(nèi)存回收時(shí)還有考慮前后空閑塊地址是否相接,因?yàn)樗前凑諌K的大小排序的,若不相接,即使兩個(gè)塊在鏈表中的位置相鄰,也不能合并,而且要注意每次分配或釋放空間后都要對鏈表進(jìn)行排序,這是由算法思想決定的,這些條件都是在做的過程中逐步完善的,所遇到的這些問題通過問老師、查閱資料得以解決。</p><p&
112、gt; 題目做完后,我對內(nèi)存動態(tài)分區(qū)部分又有了更加深刻的理解,我個(gè)人的編程能力也得到了一定程度的提高,在課堂上我們只是聽老師把理論知識給講了一遍,課下很快就忘了,通過做課程設(shè)計(jì),我們把它真正的實(shí)現(xiàn)出來,這樣印象就更深了,而且不僅僅局限于理論層次,也提高了我們分析問題、解決問題的能力,希望以后我們可以有更多的機(jī)會來做這些東西。</p><p><b> 八、參考文獻(xiàn)</b></p&g
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)報(bào)告--操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告
- 《操作系統(tǒng)》課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)-- 操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告2014217151
- 《操作系統(tǒng)原理》課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告2
- 操作系統(tǒng)程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告-操作系統(tǒng)模擬實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)---磁盤調(diào)度報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- 操作系統(tǒng)程序調(diào)度課程設(shè)計(jì)報(bào)告
評論
0/150
提交評論