第10章目標程序運行時的存儲組織ppt課件_第1頁
第10章目標程序運行時的存儲組織ppt課件_第2頁
第10章目標程序運行時的存儲組織ppt課件_第3頁
第10章目標程序運行時的存儲組織ppt課件_第4頁
第10章目標程序運行時的存儲組織ppt課件_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第十章 目的程序運轉時的存儲組織 概述棧式存儲分配的實現(xiàn)簡單的棧式存儲分配的實現(xiàn)嵌套過程言語的棧式實現(xiàn)分程序構造的存儲管理參數(shù)傳送過程調用、過程進入和過程前往概述義務:編譯程序對目的程序運轉時的數(shù)據(jù)空間的組織和管理設計運轉環(huán)境和分配存儲 如 通常棧式存儲分配規(guī)劃可為: 目的代碼區(qū) 靜態(tài)數(shù)據(jù)區(qū) Stack heap運轉環(huán)境和存儲分配設計分析邏輯階段:在目的代碼生成前,作預備本質: 關聯(lián)Binding將源程序的文本 程序運轉動作的實現(xiàn) 源文件中的名字N 運轉時的存儲S在語義學中,運用術語environment函數(shù)表示env: NS (N到S的映射)術語靜態(tài):假設一個名字的性質經(jīng)過闡明語句或隱或顯規(guī)

2、那么而定義,那么稱這種性質是“靜態(tài)確定的。動態(tài):假設名字的性質只需在程序運轉時才干知道,那么稱這種性質為“動態(tài)確定的??勺?(動態(tài))數(shù)組: 假設一個數(shù)組所需的存儲空間的大小在編譯時就知道,那么稱它為確定數(shù)組,否那么稱為可變(動態(tài))數(shù)組。例 procedure A(m,n:integer); begin real z; array Bm:n; begin end; end; 簡單的棧式分配方案程序構造特點:過程定義不嵌套,過程可遞歸調用,含可變數(shù)組; 例: main 全局變量的闡明proc Rend R;proc Q end Q;主程序執(zhí)行語句 end main 嵌套過程言語的棧式分配方案主要特

3、點:言語一個過程可以援用包圍它的任一外層過程所定義的標識符如變量,數(shù)組或過程等。實現(xiàn)一個過程可以援用它的任一外層過程的最新活動記錄中的某些數(shù)據(jù)。 關鍵技術:處理對非部分量的援用存取。設法跟蹤每個外層過程的最新活動記錄AR的位置。跟蹤方法: 1. 用靜態(tài)鏈如PL/0的SL。 2. 用DISPLAY表。用Display表的方案(1)主程序-(2)P-(3)Q-(4)R P 的活動記錄主程序的活動記錄 d1d0displaysptop主程序的活動記錄 d0spdisplaytop12用Display表的方案主程序-P-Q-RR 的活動記錄 Q 的活動記錄 P 的活動記錄主程序的活動記錄Q 的活動記錄

4、 P 的活動記錄主程序的活動記錄 displayd2d1d0 d1d0 displaysptoptopsp34DISPLAY表的維護和建立 DISPLAY表d 運轉棧 0 主程序活動記錄地址 1 R活動記錄地址 . 當過程的層次為n,它的 display為n+1個值。 一個過程被調用時,從調用過程的DISPLAY表中自下向上抄錄n個SP值,再加上本層的SP值。全局DISPLAY地址 Procedure A(m,n); integer m,n; B1:begin real z; array Bm:n; B2:begin real d, e; L3: 2 end; B4:begin array C

5、1:m; 1 B5:begin real e; L6: 5 4 end; end; L8:end; 分程序構造的存儲分配方案 處置分程序構造存儲分配方案的一種簡一方法是,把分程序看成 “無參過 程,它在哪里定義就在哪里被調用。因此,可以把處置過程的存儲方法運用四處置分程序中。但這種做法是極為低效的。 一那么,每逢進入 一個分程序,就照樣建立銜接數(shù)據(jù)和DISPLAY表,這是不用要的。 二那么 ,當從內(nèi)層分程序向外層轉移時,能夠同時要終了假設干個分程序。 按照過程處置方法,意味著必需一層一層地經(jīng)過“前往 來恢復所要到達的那個分程序的數(shù)據(jù)區(qū),但不能直接到達。例如:假設有一個從第5層分程序轉出到達第1

6、層分程序的標號L,雖然在第5層分程序任務時知道L所屬的層數(shù),我們極易從DISPLAY中獲得第1層分程序的活動記錄基址SP,但是怎樣知道第1層分程序進入時的TOP呢?獨一的方法是從 5,4,3和2各層順序退出。但這種方法是很浪費時間的。 為理處理上述問題,可采取兩種措施。第一,對每個過程或分程序都建立有本人的棧頂指示器TOP,替代原來僅有過程的棧頂指示器, 每個TOP的值保管在各自活動記錄中。這樣,上述的第二個問題便可處理。第二,不把分程序看作“無參過程,每個分程序享用包圍它的那個最近過程的DISPLAY。每個分程序都隸屬于某個確定的過程,分程序的層次是相對于它所屬的那個過程進展編號的。 每個過

7、程被當作是0層分程序。而過程體分程序假定是一個分程序當作是它所管轄的第1層分程序。這樣,每個過程的活動記錄所含的內(nèi)容有:1.過程的TOP值,它指向過程活動記錄的棧頂位置。2.銜接數(shù)據(jù),共四項: 1)老SP值;2)前往地址; (3)全局DISPAY地址;4)調用時的棧頂單元地址,老TOP。 3. 參數(shù)個數(shù)和方式單元 4. DISPAY表。5. 過程所轄的各分程序的部分數(shù)據(jù)單元。 對于每個分程序來說,它們包括:1)分程序的TOP值。當進入分程序時它含現(xiàn)行棧頂?shù)刂?,以后,用來定義棧的新高度分程序的TOP值;2)分程序的部分變量, 數(shù)組內(nèi)情向量和暫時任務單元。B Z B1T O 數(shù) 組B 數(shù) 組B e

8、 dB22的T O PB的 內(nèi) 情 向 量B 的 內(nèi) 情 向 量 z zB1 的T O PB1的T O PD I S P L A YD I S P L A Y 方式單元 m,n 2 方式單元 m,n 2連 接 數(shù) 據(jù)銜接 數(shù) 據(jù)A的T O PA的T O P (c) (d)(c )數(shù)組B分配之后; d進入分程序B22; 參數(shù)傳送(1)procedure exchangel(i,j:integer);(2) var x:integer;(3) begin;(4) x:=ai; ai:=aj; aj:=x(5) end; 帶有非部分變量和形參的PASCAL過程非局變量ai和aj的值進展交換,i,j為

9、形參在這里是傳值 (1)program reference(input,output);(2)var a,b:integer;(3)procedure swap(var x,y:integer);(4) var temp:integer;(5) begin (6) temp:=x;(7) x:=y;(8) y:=temp(9) end;(10)begin(11) a:=1; b:=2;(12) swap(a,b);(13) writeln(a=,a);writeln(b=,b)(14)end. 帶有過程swap的PASCAL程序 傳地址變量參數(shù) 例如:過程 swap(var x,y:integ

10、er); swap(a,b; a,b為調用時的實參 調用結果a,b的值被改動。傳值值調用特點是對方式參數(shù)的任何運算不影響實參的值。 例如:過程 swap(x,y:integer); swap(a,b;其結果: a,b調用前的值不改動。傳值的實現(xiàn)1.方式參數(shù)當作過程的部分變量處置,即在被調過程的活動記錄中開辟了形參的存儲空間,這些存儲位置即是我們所說的方式單元用以存放實參。2.調用過程計算實參的值,并將其放在對應方式單元開辟的空間中。3.被調用過程執(zhí)行時,就像運用部分變量一樣運用這些方式單元。procedure swap( x,y:integer); var temp:integer; begi

11、n temp:=x; x:=y; y:=temp end; 調用swap(a,b) 過程將不會影響a和b的值。 其結果等價于執(zhí)行以下運算: x :=a; y :=b; temp :=x; x :=y; y :=temp傳地址的實現(xiàn)call- by- reference )(call-by-address)(call-by-location) 把真實參數(shù)的地址傳送給相應的形參,即 調用過程把一個指向實參的存儲地址的指針傳送給被調用過程相應的形參:1真實參數(shù)是一個名字,或具有左值的表達式-傳送左值2真實參數(shù)是無左值的表達式-計算值,放入一存儲單元,傳此存儲單元地址3目的代碼中,被調用過程對形參的援

12、用變成對傳送給被調用過程的指針的間接援用procedure swap( x,y:integer); var temp:integer; begin temp:=x; x:=y; y:=temp end; 調用swap(i,ai) 其結果等價于執(zhí)行以下運算: 1把 I和ai的地址分別放到x和y相應的單元a1,a2 2( temp :=x;)temp的內(nèi)容置為a1所指單元中存的內(nèi)容 3 (x :=y;) a1所指單元的內(nèi)容置為a2所指單元值4( y :=temp) a2所指單元的內(nèi)容置為temp的值 (1)swap(x,y)(2)int *x,*y;(3) int temp;(4) temp=*x

13、; *x=*y; *y=temp;(5)(6)main( )(7) int a=1,b=2;(8) swap(&a,&b);(9) printf(“a is now %d,b is now %dn,a,b);(10) 在一個值調用過程中運用指針的C程序在C程序中無傳地址所以用指針實現(xiàn)。過程調用的四元式序列 S call id() ,E Epar T1par T2par Tncall id,n 過程作為參數(shù)傳送三種環(huán)境:詞法環(huán)境 傳送環(huán)境 活動環(huán)境 program param(input,output); procedure b(function h(n:integer):integer);(*

14、) var m:integer; begin m:=3; writeln(h(2) endb; procedure c;(*) var m:integer; function f(n:integer):integr;(&) begin f:=m+n endf; begin m:=0; b(f) end c begin c end. (1)program param(input,output);(2)procedure b(function h(n:integer):integer);(3) begin writeln(h(2) endb;(4)procedure c;(5) var m:int

15、eger;(6) function f(n:integer):integr;(7) begin f:=m+n endf;(8)begin m := 0; b(f) end c;(9)begin(10) c(11)end 圖10-27 嵌套過程作為參數(shù)傳送各種數(shù)據(jù)對象的存儲分配數(shù)據(jù)對象 name 名字,稱號 type 類型 location 內(nèi)存地址 value 值 component 成分 建立內(nèi)情向量,問配內(nèi)存的目的代碼n維可變數(shù)組, type-每個元素占一個字begin k:=1;n:=1;c:=0; while k=n do begin di:=ui-li+ 1; m:=m*di; c:=c*di+li; 把li,ui和di填進內(nèi)情向量表區(qū); k:=k+1 end; 懇求m個空間, 令首地址為a;把n,c,type ,a填進內(nèi)情 向量表區(qū)end賦值中數(shù)組元素的翻譯A V:=EV id | id ,E | EV | id , E | id E構造記錄,籠統(tǒng)數(shù)據(jù)類型對象類實例變量的存儲構造(CIR)class parent | class parent public int a,b,c; | public a,b,c; public void draw() .; | public virtual void

溫馨提示

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

評論

0/150

提交評論