2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論