第13章運行時存儲空間的組織ppt課件_第1頁
第13章運行時存儲空間的組織ppt課件_第2頁
第13章運行時存儲空間的組織ppt課件_第3頁
第13章運行時存儲空間的組織ppt課件_第4頁
第13章運行時存儲空間的組織ppt課件_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第13章 運轉時存儲空間的組織第一節(jié) 程序的存儲空間1. 代碼空間和數(shù)據(jù)空間1.1 程序投入運轉的必要條件程序要投入運轉,必需在內存中分配一定的存儲空間,并將程序裝入其中,包括: 可運轉的代碼代碼空間 代碼運轉的環(huán)境數(shù)據(jù)空間1.2 代碼空間C內容:線性存放著目的指令序列。當前執(zhí)行的指令位置由指令指針ip指示。1.3 數(shù)據(jù)空間D內容:變量、常數(shù)、控制信息、描畫符等。 靜態(tài)分配:在運轉前就可確定數(shù)據(jù)空間的大小, 在編譯時辰就能進展的存儲分配。 動態(tài)分配:運轉時才干進展的存儲分配。2. 活動記錄程序由程序單元函數(shù)、子程序組成,因此程序的數(shù)據(jù)空間由相應程序單元的數(shù)據(jù)空間組成。 一個程序單元的數(shù)據(jù)空間叫

2、做該程序單元的活動記錄。 一個程序單元在執(zhí)行過程中所需求的數(shù)據(jù)信息、管理信息都是經(jīng)過它的活動記錄來存放的。 一個程序單元的每一次激活,都應在內存中建立相應的活動記錄。2.1 活動記錄的內容(1) 前往地址(2) 動態(tài)銜接(3) 靜態(tài)銜接(4) 現(xiàn)場維護(5) 參數(shù)區(qū)(6) 變量區(qū)變量區(qū)參數(shù)區(qū)現(xiàn)場維護靜態(tài)銜接動態(tài)銜接前往地址2.2 活動記錄的特點除了變量存儲區(qū)外,其他部分存儲長度編譯時可以確定,所以變量 i 的地址可用下式表示:D + offset(i)其中, D是活動記錄的首地址;offset(i)是變量 i 在活動記錄中的位移。2.3 變量的類型1) 靜態(tài)變量編譯時可以確定活動記錄的首地址D

3、和變量的相對位置offset(i) 。不論在程序單元的哪一次激活中,變量的存儲位置均為:D+offset(i)。2) 半靜態(tài)變量編譯時可確定變量i的相對位置offset(i),單元激活時可確定活動記錄的首地址D。那么每一次激活,變量對應一個不同的存儲位置:D+offset(i)。3) 半動態(tài)變量編譯時不能確定變量 i 的相對位置offset(i),但能確定 i 的存儲格式??稍诨顒佑涗浿袨?i 建立一個描畫符,用于記錄 i 在內存中的存儲格式,并在描畫符中建立一個指針域,用于記錄 i 在運轉時的詳細存儲地址。例:動態(tài)數(shù)組 int a1.m; int b1.m1.n;4) 動態(tài)變量編譯時不能確定

4、變量 i 的相對位置offset(i),也不能確定 i 的存儲格式。即描畫符需求到運轉時才干確定,因此可在活動記錄中為 i 設置兩個指針,一個記錄運轉時描畫符的地址,另一個記錄運轉時 i 的地址。例:某些言語中類型可變的變量;某些言語中維數(shù)可變的數(shù)組。 4. 存儲分配方式4.1 靜態(tài)分配 可用于靜態(tài)變量的分配,變量與存儲區(qū)域的綁定關系在編譯時便可建立,并完成存儲分配; 不允許遞歸調用,不允許動態(tài)數(shù)組,不允許動態(tài)類型的數(shù)據(jù)對象。4.2 棧式分配 用棧分配活動記錄; 各程序單元之間的調用遵照“后進先出方式; 活動記錄的建立和吊銷也滿足“后進先出方式; 分配方法:當一個程序單元被激活時, 在棧頂分配

5、其活動記錄;當程序單元退出時,在棧頂將其活動記錄撤銷。例子:某程序中各程序單元的調用順序為:P運轉P調用QQ調用RR退出Q退出P退出P的活動記錄Q的活動記錄R的活動記錄.4.3 堆分配由于動態(tài)變量的首地址、長度、類型等在編譯時無法確定,在執(zhí)行過程中也能夠改動,所以不能夠在棧上為這樣的對象分配存儲區(qū)。對于這些變量,必需分配在堆上。例如:C中經(jīng)過malloc分配的變量;某些言語中的動態(tài)變量等。4.4 存儲空間的組織代碼靜態(tài)數(shù)據(jù)棧堆第二節(jié) 棧式分配1. 半靜態(tài)變量的棧式分配1.1 特點 變量及活動記錄的長度都可靜態(tài)確定; 一個程序單元能夠被多次激活,活動記錄是在程序單元激活時動態(tài)建立,并與代碼段建立

6、聯(lián)絡的。1.2 處置方法(1) 設置當前棧指針current,表示當前活動記錄的開場位置活動記錄首地址D;(2) 指針free表示數(shù)據(jù)存儲器下一個可用單元;(3) 變量綁定于它在活動記錄中的常數(shù)位移 i,變量經(jīng)過current變址訪問;(4) A調用B時,在A活動記錄的棧頂之上建立B的當前實例的活動記錄;(5) 從B前往時,釋放其活動記錄。1.3 動態(tài)銜接和動態(tài)鏈 動態(tài)銜接:A調用B時,B的活動記錄中保管的A的活動記錄地址。 動態(tài)鏈:由動態(tài)銜接組成的一個調用鏈。AEFGF例:A call E; E call F; F call G; G call F;.1.4 CALL P的翻譯(1) D f

7、ree := ip + 5保管前往地址(2) Dfree + 1 := current 保管current (3) current := free 建立新的current(4) free := free + L 調整free(5) ip := P轉移到P例子:過程A調用過程P前往地址動態(tài)銜接前往地址動態(tài)銜接A的活動記錄P的活動記錄currentfreefreecurrentcurrentcurrent1.5 RETURN語句的翻譯(1) 恢復freefree := current(2) 恢復主調過程的currentcurrent := Dcurrent + 1(3) 前往ip := Dfree

8、前往地址動態(tài)銜接前往地址動態(tài)銜接A的活動記錄P的活動記錄freecurrent過程P退出,前往過程Acurrentfree2. 半動態(tài)變量的棧式分配 在活動記錄中為變量 i建立描畫符; 在活動記錄的最后分配變量 i ; 用描畫中的指針域指向變量 i 的存儲位置。變量區(qū)變量 i 的存儲區(qū)參數(shù)區(qū)現(xiàn)場維護靜態(tài)銜接動態(tài)銜接前往地址currentfree(1) 編譯時創(chuàng)建描畫符,并產(chǎn)生在運轉時動態(tài)修正描畫符和創(chuàng)建變量存儲空間的指令。(2) 一個單元激活后進入該單元,遇到變量 i 的闡明時,調用上述指令填描畫符,分配存儲空間,并調整free := free + L。3. 動態(tài)變量的存儲分配 在活動記錄中為

9、變量 i 分配兩個指針 在堆上分配動態(tài)變量的描畫符和存儲空間 用活動記錄中的兩個指針指向上述兩個位置變量區(qū)前往地址currentfree變量 i 的描述符變量 i 的存儲區(qū)堆空間 程序單元間通訊方式是經(jīng)過非部分環(huán)境和參數(shù)傳送來實現(xiàn)的。 對非部分環(huán)境的援用必需思索變量的作用域,變量的作用域是指可訪問該變量的程序范圍。第三節(jié) 非部分環(huán)境1. 動態(tài)作用域規(guī)那么這是一種最近活動規(guī)那么,對非部分變量,援用的應是最近的“調用外層中闡明的變量。例:A-C-F的調用序列,F(xiàn)的直接調用外層為C、C的直接調用外層為A。2. 援用方法經(jīng)過“動態(tài)鏈找到最近的“調用外層中闡明的變量。一、動態(tài)作用域規(guī)那么1. 靜態(tài)作用域

10、規(guī)那么這是一種最近嵌套規(guī)那么,對非部分變量,援用的應是最近的“嵌套外層中闡明的變量。例:嵌套的層次假設A是B的直接外層,那么B的層次=A的層次+1。A(0)、B(1)、C(2)、D(3)、E(1)、F(2)、G(2)二、靜態(tài)作用域規(guī)那么unit A;y: int;unit B;end B;y: int;unit C;end D;end C;.unit D;.ABCDEFGend E;z: int;unit F;end G;unit G;x,y: int;.unit E;z:=x+y;end F;.end A;x: int;ABCDEFG2. 援用方法經(jīng)過“靜態(tài)鏈找到最近的“嵌套外層中闡明的變量

11、。(1) 靜態(tài)銜接和靜態(tài)鏈靜態(tài)銜接:指向嵌套直接外層的最新活動記錄的指針。靜態(tài)鏈:各嵌套程序單元的活動記錄中,靜態(tài)銜接的序列構成一個靜態(tài)鏈。AEFGF例:A call E; E call F; F call G; G call F;.假設當前處在棧頂?shù)氖菃卧狟的活動記錄,單元B中援用了單元A中的變量x。單元A的層次為nA、單元B的層次為nB。要找到變量x的存放地址,即:DA + offset(x) 關鍵是要找到單元A的活動記錄DA。(2) 非部分變量x的地址的求法nB - nA = 0:A和B是同一層A就是BDA = currentnB - nA = 1:A是B的直接外層第1個外層DA Dcu

12、rrent + 2nB - nA = 2:A是B的第2個外層DA = DDcurrent + 2 + 2nB - nA = 3:A是B的第3個外層DA = DDDcurrent + 2 2 2DA的求法令nB - nA = d,定義函數(shù)f(d),表示從B的活動記錄出發(fā),沿靜態(tài)鏈搜索d步,可以到達A的活動記錄。f(d) if(d=0) then return current ; else return D f(d-1) + 2 ;(3) 靜態(tài)銜接的建立單元X調用單元B時當前棧頂為X的活動記錄,需求建立B的活動記錄。(3)nX-nB=1(4)nX-nB1(1)nX-nB=-1XBcall BBXc

13、all BBcall BX(2)nX-nB=0BXcall B(1) nX-nB = -1, B的靜態(tài)銜接f(0)(2) nX-nB = 0, B的靜態(tài)銜接f(1)(3) nX-nB = 1, B的靜態(tài)銜接f(2)(4) nX-nB = d, B的靜態(tài)銜接f(d+1)因此,靜態(tài)銜接算法為:Dfree+2 = f(d+1)(1) D free := ip + 6保管前往地址(2) Dfree + 1 := current 設置動態(tài)鏈接 (3) Dfree + 2 := f(d+1) 設置靜態(tài)鏈接 (4) current := free 建立新的current(5) free := free +

14、L 調整free(6) ip := P轉移到P(4) CALL P的處置 形參和實參形參(Formal Parameter):被調用單元的參數(shù)實參(Actual Parameter) :調用單元的參數(shù) 參數(shù)傳送的類型傳值、傳值得結果、傳地址第四節(jié) 參數(shù)傳送參數(shù)傳送實例procedure main begin a, b: integer ; a:=1; b:=2 ;print ( a , b ) ; swap( a , b ) ;print ( a , b ) ; endprocedure swap(x , y)var x,y: intger;beginprint ( x , y ) ;x :=

15、 x+y ;y := x-y ;x := x-y; print ( x , y ) end(1) 傳值單向傳送實參的值形參的值運轉結果:1 , 21 , 22 , 11 , 2(2) 傳值得結果雙向傳送實參的值形參的值形參的結果值實參的結果值運轉結果:1 , 21 , 22 , 12 , 1(3) 傳地址共用同一數(shù)據(jù)單元實參的地址形參的地址運轉結果:1 , 21 , 22 , 12 , 1留意(3)和(2)的區(qū)別,如調用swap( a , a )時的運轉結果。習題1. 對以下程序,試描畫每次調用時活動記錄棧的情況,直到C中調用B時。重點留意動態(tài)銜接和靜態(tài)銜接的情況。program A;procedure B;procedure C; call B; end C; call C; end Bprocedure D; cal

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論