版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第十章 目的程序運(yùn)轉(zhuǎn)時(shí)的存儲(chǔ)組織 概述棧式存儲(chǔ)分配的實(shí)現(xiàn)簡(jiǎn)單的棧式存儲(chǔ)分配的實(shí)現(xiàn)嵌套過(guò)程言語(yǔ)的棧式實(shí)現(xiàn)分程序構(gòu)造的存儲(chǔ)管理參數(shù)傳送過(guò)程調(diào)用、過(guò)程進(jìn)入和過(guò)程前往概述義務(wù):編譯程序?qū)δ康某绦蜻\(yùn)轉(zhuǎn)時(shí)的數(shù)據(jù)空間的組織和管理設(shè)計(jì)運(yùn)轉(zhuǎn)環(huán)境和分配存儲(chǔ) 如 通常棧式存儲(chǔ)分配規(guī)劃可為: 目的代碼區(qū) 靜態(tài)數(shù)據(jù)區(qū) Stack heap運(yùn)轉(zhuǎn)環(huán)境和存儲(chǔ)分配設(shè)計(jì)分析邏輯階段:在目的代碼生成前,作預(yù)備本質(zhì): 關(guān)聯(lián)Binding將源程序的文本 程序運(yùn)轉(zhuǎn)動(dòng)作的實(shí)現(xiàn) 源文件中的名字N 運(yùn)轉(zhuǎn)時(shí)的存儲(chǔ)S在語(yǔ)義學(xué)中,運(yùn)用術(shù)語(yǔ)environment函數(shù)表示env: NS (N到S的映射)術(shù)語(yǔ)靜態(tài):假設(shè)一個(gè)名字的性質(zhì)經(jīng)過(guò)闡明語(yǔ)句或隱或顯規(guī)
2、那么而定義,那么稱(chēng)這種性質(zhì)是“靜態(tài)確定的。動(dòng)態(tài):假設(shè)名字的性質(zhì)只需在程序運(yùn)轉(zhuǎn)時(shí)才干知道,那么稱(chēng)這種性質(zhì)為“動(dòng)態(tài)確定的??勺?(動(dòng)態(tài))數(shù)組: 假設(shè)一個(gè)數(shù)組所需的存儲(chǔ)空間的大小在編譯時(shí)就知道,那么稱(chēng)它為確定數(shù)組,否那么稱(chēng)為可變(動(dòng)態(tài))數(shù)組。例 procedure A(m,n:integer); begin real z; array Bm:n; begin end; end; 簡(jiǎn)單的棧式分配方案程序構(gòu)造特點(diǎn):過(guò)程定義不嵌套,過(guò)程可遞歸調(diào)用,含可變數(shù)組; 例: main 全局變量的闡明proc Rend R;proc Q end Q;主程序執(zhí)行語(yǔ)句 end main 嵌套過(guò)程言語(yǔ)的棧式分配方案主要特
3、點(diǎn):言語(yǔ)一個(gè)過(guò)程可以援用包圍它的任一外層過(guò)程所定義的標(biāo)識(shí)符如變量,數(shù)組或過(guò)程等。實(shí)現(xiàn)一個(gè)過(guò)程可以援用它的任一外層過(guò)程的最新活動(dòng)記錄中的某些數(shù)據(jù)。 關(guān)鍵技術(shù):處理對(duì)非部分量的援用存取。設(shè)法跟蹤每個(gè)外層過(guò)程的最新活動(dòng)記錄AR的位置。跟蹤方法: 1. 用靜態(tài)鏈如PL/0的SL。 2. 用DISPLAY表。用Display表的方案(1)主程序-(2)P-(3)Q-(4)R P 的活動(dòng)記錄主程序的活動(dòng)記錄 d1d0displaysptop主程序的活動(dòng)記錄 d0spdisplaytop12用Display表的方案主程序-P-Q-RR 的活動(dòng)記錄 Q 的活動(dòng)記錄 P 的活動(dòng)記錄主程序的活動(dòng)記錄Q 的活動(dòng)記錄
4、 P 的活動(dòng)記錄主程序的活動(dòng)記錄 displayd2d1d0 d1d0 displaysptoptopsp34DISPLAY表的維護(hù)和建立 DISPLAY表d 運(yùn)轉(zhuǎn)棧 0 主程序活動(dòng)記錄地址 1 R活動(dòng)記錄地址 . 當(dāng)過(guò)程的層次為n,它的 display為n+1個(gè)值。 一個(gè)過(guò)程被調(diào)用時(shí),從調(diào)用過(guò)程的DISPLAY表中自下向上抄錄n個(gè)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; 分程序構(gòu)造的存儲(chǔ)分配方案 處置分程序構(gòu)造存儲(chǔ)分配方案的一種簡(jiǎn)一方法是,把分程序看成 “無(wú)參過(guò) 程,它在哪里定義就在哪里被調(diào)用。因此,可以把處置過(guò)程的存儲(chǔ)方法運(yùn)用四處置分程序中。但這種做法是極為低效的。 一那么,每逢進(jìn)入 一個(gè)分程序,就照樣建立銜接數(shù)據(jù)和DISPLAY表,這是不用要的。 二那么 ,當(dāng)從內(nèi)層分程序向外層轉(zhuǎn)移時(shí),能夠同時(shí)要終了假設(shè)干個(gè)分程序。 按照過(guò)程處置方法,意味著必需一層一層地經(jīng)過(guò)“前往 來(lái)恢復(fù)所要到達(dá)的那個(gè)分程序的數(shù)據(jù)區(qū),但不能直接到達(dá)。例如:假設(shè)有一個(gè)從第5層分程序轉(zhuǎn)出到達(dá)第1
6、層分程序的標(biāo)號(hào)L,雖然在第5層分程序任務(wù)時(shí)知道L所屬的層數(shù),我們極易從DISPLAY中獲得第1層分程序的活動(dòng)記錄基址SP,但是怎樣知道第1層分程序進(jìn)入時(shí)的TOP呢?獨(dú)一的方法是從 5,4,3和2各層順序退出。但這種方法是很浪費(fèi)時(shí)間的。 為理處理上述問(wèn)題,可采取兩種措施。第一,對(duì)每個(gè)過(guò)程或分程序都建立有本人的棧頂指示器TOP,替代原來(lái)僅有過(guò)程的棧頂指示器, 每個(gè)TOP的值保管在各自活動(dòng)記錄中。這樣,上述的第二個(gè)問(wèn)題便可處理。第二,不把分程序看作“無(wú)參過(guò)程,每個(gè)分程序享用包圍它的那個(gè)最近過(guò)程的DISPLAY。每個(gè)分程序都隸屬于某個(gè)確定的過(guò)程,分程序的層次是相對(duì)于它所屬的那個(gè)過(guò)程進(jìn)展編號(hào)的。 每個(gè)過(guò)
7、程被當(dāng)作是0層分程序。而過(guò)程體分程序假定是一個(gè)分程序當(dāng)作是它所管轄的第1層分程序。這樣,每個(gè)過(guò)程的活動(dòng)記錄所含的內(nèi)容有:1.過(guò)程的TOP值,它指向過(guò)程活動(dòng)記錄的棧頂位置。2.銜接數(shù)據(jù),共四項(xiàng): 1)老SP值;2)前往地址; (3)全局DISPAY地址;4)調(diào)用時(shí)的棧頂單元地址,老TOP。 3. 參數(shù)個(gè)數(shù)和方式單元 4. DISPAY表。5. 過(guò)程所轄的各分程序的部分?jǐn)?shù)據(jù)單元。 對(duì)于每個(gè)分程序來(lái)說(shuō),它們包括:1)分程序的TOP值。當(dāng)進(jìn)入分程序時(shí)它含現(xiàn)行棧頂?shù)刂?,以后,用?lái)定義棧的新高度分程序的TOP值;2)分程序的部分變量, 數(shù)組內(nèi)情向量和暫時(shí)任務(wù)單元。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進(jìn)入分程序B22; 參數(shù)傳送(1)procedure exchangel(i,j:integer);(2) var x:integer;(3) begin;(4) x:=ai; ai:=aj; aj:=x(5) end; 帶有非部分變量和形參的PASCAL過(guò)程非局變量ai和aj的值進(jìn)展交換,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. 帶有過(guò)程swap的PASCAL程序 傳地址變量參數(shù) 例如:過(guò)程 swap(var x,y:integ
10、er); swap(a,b; a,b為調(diào)用時(shí)的實(shí)參 調(diào)用結(jié)果a,b的值被改動(dòng)。傳值值調(diào)用特點(diǎn)是對(duì)方式參數(shù)的任何運(yùn)算不影響實(shí)參的值。 例如:過(guò)程 swap(x,y:integer); swap(a,b;其結(jié)果: a,b調(diào)用前的值不改動(dòng)。傳值的實(shí)現(xiàn)1.方式參數(shù)當(dāng)作過(guò)程的部分變量處置,即在被調(diào)過(guò)程的活動(dòng)記錄中開(kāi)辟了形參的存儲(chǔ)空間,這些存儲(chǔ)位置即是我們所說(shuō)的方式單元用以存放實(shí)參。2.調(diào)用過(guò)程計(jì)算實(shí)參的值,并將其放在對(duì)應(yīng)方式單元開(kāi)辟的空間中。3.被調(diào)用過(guò)程執(zhí)行時(shí),就像運(yùn)用部分變量一樣運(yùn)用這些方式單元。procedure swap( x,y:integer); var temp:integer; begi
11、n temp:=x; x:=y; y:=temp end; 調(diào)用swap(a,b) 過(guò)程將不會(huì)影響a和b的值。 其結(jié)果等價(jià)于執(zhí)行以下運(yùn)算: x :=a; y :=b; temp :=x; x :=y; y :=temp傳地址的實(shí)現(xiàn)call- by- reference )(call-by-address)(call-by-location) 把真實(shí)參數(shù)的地址傳送給相應(yīng)的形參,即 調(diào)用過(guò)程把一個(gè)指向?qū)崊⒌拇鎯?chǔ)地址的指針傳送給被調(diào)用過(guò)程相應(yīng)的形參:1真實(shí)參數(shù)是一個(gè)名字,或具有左值的表達(dá)式-傳送左值2真實(shí)參數(shù)是無(wú)左值的表達(dá)式-計(jì)算值,放入一存儲(chǔ)單元,傳此存儲(chǔ)單元地址3目的代碼中,被調(diào)用過(guò)程對(duì)形參的援
12、用變成對(duì)傳送給被調(diào)用過(guò)程的指針的間接援用procedure swap( x,y:integer); var temp:integer; begin temp:=x; x:=y; y:=temp end; 調(diào)用swap(i,ai) 其結(jié)果等價(jià)于執(zhí)行以下運(yùn)算: 1把 I和ai的地址分別放到x和y相應(yīng)的單元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) 在一個(gè)值調(diào)用過(guò)程中運(yùn)用指針的C程序在C程序中無(wú)傳地址所以用指針實(shí)現(xiàn)。過(guò)程調(diào)用的四元式序列 S call id() ,E Epar T1par T2par Tncall id,n 過(guò)程作為參數(shù)傳送三種環(huán)境:詞法環(huán)境 傳送環(huán)境 活動(dòng)環(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 嵌套過(guò)程作為參數(shù)傳送各種數(shù)據(jù)對(duì)象的存儲(chǔ)分配數(shù)據(jù)對(duì)象 name 名字,稱(chēng)號(hào) type 類(lèi)型 location 內(nèi)存地址 value 值 component 成分 建立內(nèi)情向量,問(wèn)配內(nèi)存的目的代碼n維可變數(shù)組, type-每個(gè)元素占一個(gè)字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填進(jìn)內(nèi)情向量表區(qū); k:=k+1 end; 懇求m個(gè)空間, 令首地址為a;把n,c,type ,a填進(jìn)內(nèi)情 向量表區(qū)end賦值中數(shù)組元素的翻譯A V:=EV id | id ,E | EV | id , E | id E構(gòu)造記錄,籠統(tǒng)數(shù)據(jù)類(lèi)型對(duì)象類(lèi)實(shí)例變量的存儲(chǔ)構(gòu)造(CIR)class parent | class parent public int a,b,c; | public a,b,c; public void draw() .; | public virtual void
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024公司新員工入職培訓(xùn)心得體會(huì)(32篇)
- 2024年琥珀課件:穿越億年的生物寶藏
- ABPLC在智能制造領(lǐng)域的應(yīng)用:2024年深度培訓(xùn)教程
- 2025版高考英語(yǔ)一輪復(fù)習(xí)課時(shí)提能練必修3Module5GreatPeopleandGreatInventionsofAncientChina含解析外研版
- 2024-2025學(xué)年新教材高中物理第四章運(yùn)動(dòng)和力的關(guān)系第六節(jié)超重和失重學(xué)案新人教版必修1
- 2024年九年級(jí)歷史下冊(cè)不斷發(fā)展的現(xiàn)代社會(huì)同步練習(xí)含解析新人教版
- 十一月《證券投資基金基礎(chǔ)知識(shí)》考試考試押卷含答案
- 快樂(lè)美術(shù)課堂
- 2024年小星星國(guó)際航空航天展:展示飛行夢(mèng)想
- 2023南山竹海景區(qū)導(dǎo)游詞
- 國(guó)家開(kāi)放大學(xué)《計(jì)算機(jī)繪圖(本)》章節(jié)測(cè)試參考答案
- 虧損項(xiàng)目整改措施
- 第2講循環(huán)流化床鍋爐的構(gòu)造及工作原理ppt課件
- DB45∕T 2364-2021 公路路基監(jiān)測(cè)技術(shù)規(guī)范
- 英語(yǔ)培優(yōu)扶差記錄表(共7頁(yè))
- 排球比賽記分表
- 網(wǎng)站服務(wù)合同域名續(xù)費(fèi)與維護(hù)
- 實(shí)驗(yàn)幼兒園陪餐記錄表
- JJG113_2013_標(biāo)準(zhǔn)金屬洛氏硬度塊檢定規(guī)程_解讀
- 小學(xué)數(shù)學(xué)一位數(shù)加減混合運(yùn)算算術(shù)題(969道)
- 安全教育培訓(xùn)記錄運(yùn)輸車(chē)輛安全技術(shù)要求
評(píng)論
0/150
提交評(píng)論