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

下載本文檔

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

文檔簡介

1、第九章 運轉(zhuǎn)時存儲空間組織 編譯程序的最終目的是將源程序翻譯成等價的目的程序。 為了到達此目的,除了進展詞法、語法、語義分析外,在生成目的代碼之前,需求把程序靜態(tài)的正文和實現(xiàn)這個程序運轉(zhuǎn)時的活動聯(lián)絡(luò)起來,以便弄清楚未來在代碼運轉(zhuǎn)時,源程序中的各個變量、常量等用戶定義的量是如何存放的,如何去訪問它。 在程序的運轉(zhuǎn)過程中,程序中數(shù)據(jù)的存取是經(jīng)過與之對應(yīng)的存儲單元來進展的。9.1 目的程序運轉(zhuǎn)時的活動9.1.1 過程的活動 先討論一個過程的靜態(tài)源程序和它的目的程序在運轉(zhuǎn)時的活動之間的關(guān)系。 過程定義僅僅是一個闡明;而過程調(diào)用是過程體的一次執(zhí)行。過程的活動:是指該過程的一次執(zhí)行。即每次執(zhí)行一個過程體,

2、就產(chǎn)生該過程體的一個活動。一個活動的生存期:指從執(zhí)行該過程體的第一步操作到最后一步操作之間的這段時間。活動之間的關(guān)系一個過程是遞歸的:假設(shè)該過程在還沒有退出當(dāng)前的活動時,又開場了它的一次新的活動。即在某個時辰,能夠有該過程的幾個活動在活潑著。假設(shè) a 和 b 是兩個過程的活動,那么它們的生存期或者是不重疊的,或者是嵌套的。9.1.2 參數(shù)傳送如何將實踐參數(shù)傳送給相應(yīng)的方式參數(shù)? 傳地址call by reference 傳值call by value 傳名call by name /宏 復(fù)制-恢復(fù)copy-restore /得結(jié)果9.2 運轉(zhuǎn)時存儲器的劃分9.2.1 運轉(zhuǎn)時存儲器的劃分 目標(biāo)代

3、碼 靜態(tài)數(shù)據(jù) 棧 堆管理過程的活動存放動態(tài)數(shù)據(jù)9.2.2 活動記錄 為了管理過程在一次執(zhí)行中所需求的信息,運用一個延續(xù)的存儲塊,這個存儲塊就稱為活動記錄。 用一個活動記錄表示該活動的相關(guān)信息,并將其壓入棧。 臨時單元 內(nèi)情向量 局部變量 形式單元 靜態(tài)鏈 動態(tài)鏈 返回地址SPTOP活動記錄的大小在編譯時可確定。9.2.3 存儲分配戰(zhàn)略 不同的編譯程序關(guān)于數(shù)據(jù)空間的存儲分配戰(zhàn)略能夠不同。 常用的存儲分配戰(zhàn)略有: 靜態(tài)分配戰(zhàn)略 棧式動態(tài)分配戰(zhàn)略 堆式動態(tài)分配戰(zhàn)略 由關(guān)于稱號的作用域和生成期的定義規(guī)那么決議。9.3 靜態(tài)存儲分配 假設(shè)在編譯時就能確定一個程序在運轉(zhuǎn)時所需的存儲空間的大小,那么在編譯時

4、就可以安排好目的程序運轉(zhuǎn)時的全部數(shù)據(jù)空間,并能確定每個數(shù)據(jù)項的單元地址。 存儲空間的這種分配方法叫做“靜態(tài)分配。9.4 簡單的棧式存儲分配 先思索一種簡單的程序文語的實現(xiàn)。假設(shè)該言語不允許過程嵌套,但允許過程遞歸調(diào)用。例如: C言語的程序構(gòu)造 int x , y ; main( ) int a , b ; void R( ) char ch ; char Q( ) float x ; 這類言語,關(guān)于部分稱號的存儲分配,可以直接采用棧式存儲分配戰(zhàn)略。 運用棧式存儲分配,即:把存儲組成一個棧,運轉(zhuǎn)時,每當(dāng)進入一個過程時,就把它的活動記錄壓入棧,從而構(gòu)成過程任務(wù)時的數(shù)據(jù)區(qū)。 一個過程的活動記錄的大小

5、在編譯時是可靜態(tài)確定的,當(dāng)該活動終了時,那么其活動記錄也將出棧。例如:圖9.13 C言語程序的存儲組織 P255 9.4.1 C言語的活動記錄 C言語的活動記錄有四項: 延續(xù)數(shù)據(jù) 老SP值 前往地址參數(shù)個數(shù)方式參數(shù)過程的部分變量、數(shù)組內(nèi)情向量、暫時任務(wù)單元 其構(gòu)造方式見:圖9.14 P2569.5 嵌套過程言語的棧式實現(xiàn) 例如: 圖9.15中PASCAL程序。 (P258)0 P1 Q1 S2 R9.5.1 非部分名字的訪問的實現(xiàn) 由于允許過程定義是嵌套的,那么一個過程可以援用包圍它的任一外層過程中所定義的 變量或數(shù)組。 為了在活動記錄中查找非部分名字所對應(yīng)的存儲空間,就必需知道它的一切外層過

6、程的最新活動記錄的地址。一、靜態(tài)鏈臨時單元 內(nèi)情向量 局部變量形式單元形參個數(shù) 靜態(tài)鏈返回地址 動態(tài)鏈SPTOP直接外層的最新活動記錄的基地址調(diào)用前的活動記錄的基地址例如 圖.15 程序運轉(zhuǎn)時棧的變化過程。 i c 0 0返回地址 0 x a 0返回地址 0SPTOPP 調(diào)用S 時S的活動記錄P的活動記錄10 9 8 7 6 54 3 2 1 0 i b 1 0返回地址 5 SPTOP S 調(diào)用R 時S的活動記錄P的活動記錄16 1514 13 12 11 0 5R的活動記錄二、嵌套層次方式表 為了提高訪問非部分量的速度,還可援用一個指針數(shù)組,即 display表。臨時單元 內(nèi)情向量 局部變量display形式單元形參個數(shù)全局 display返回地址 動態(tài)鏈SPTOP調(diào)用前的活動記錄的基地址9.6 堆式動態(tài)存儲分配問題:假設(shè)一個程序文語允許用戶自在的懇求或退還數(shù)據(jù)空間如new/delete,或者不僅有過程而且還有進程的程序構(gòu)造,這種情況下,棧式的動態(tài)分配就不適用了,而通常運用堆式的動態(tài)存儲分配方案。9.6.1堆式動態(tài)存儲分配的實現(xiàn)定長塊管理變長塊管理 分配回收 初次滿足法 隨機(查棧表) 直接插入表頭 最優(yōu)滿足法 懇求內(nèi)存范圍較廣(查找) 最差滿足法 懇求內(nèi)存范圍較窄(不查找)9.6.2隱式存儲回收用戶程序和回收子程序并行任務(wù)存儲塊格式:標(biāo)志:對已分配的塊跟蹤程序中各

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論