




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、2022/8/231Chapter9 Run-Time Environments概 述存儲分配策略 (Storage-allocation strategies)訪問非局部名字 (Access to nonlocal names)參數傳遞 (Parameter passing)2022/8/2329.1 概述在生成目標代碼之前,必須了解目標代碼執行時的環境1、空間環境目標代碼的運行都是在操作系統分配的一塊存儲區內進行的這塊存儲區必須容納目標代碼和目標代碼運行時的數據空間(目標代碼中指令能訪問的空間)2022/8/2339.1 概述編譯程序分配目標程序運行時的數據空間的基本依據是設計程序語言時對
2、程序運行中存儲空間的使用和管理辦法的規定代碼生成器在生成目標代碼時必須要體現該程序語言在設計時分配數據空間的規定2022/8/2349.1 概述2、寄存器環境寄存器是目標機器中的寶貴資源如何分配寄存器提高程序運行的效率是代碼生成器主要要解決的問題,(詳細內容見下一講)* 數據空間分配和寄存器分配最后都體現在生成的目標代碼中2022/8/2359.1 概述幾種典型程序設計語言的特點不同的語言有不同的分配數據空間的規定,有不同的組織運行時刻存儲空間的方法2022/8/2369.1 概述幾種典型程序設計語言的特點與差異:CPASCALALGOLFORTRAN過程遞歸調用過程嵌套定義動態數組動態內存申
3、請指針檢查 2022/8/2379.1 概述名字的聯編(Bindings of Names)名字的左值 (l-value) 內存地址,存儲名字的瞬時值名字的右值 (r-value) 名字的瞬時值名字的聯編 將一個內存地址與一個名字聯系起來在程序的一次運行中,一個名字右值(瞬時值)可能會經常改變,一個名字也可能被聯編到多個地址(如遞歸調用中)2022/8/2389.1 概述運行時刻內存的典型劃分操作系統收到運行目標程序的指令,分配一塊連續的內存空間使目標程序在其上運行P397 Fig7.7這只是一個典型的劃分,具體語言不同,該劃分也不同棧(Stack):支持過程的遞歸調用堆(Heap):支持動態
4、內存申請2022/8/2399.1 概述活動記錄(Activation Records)是一段連續的存儲區,用以存放過程的一次執行所需要的信息,如局部數據活動記錄的結構 P398 Fig7.8參數域、狀態域、數據域TOP 指向棧頂,TOP-SP 指向局部數據區的開始位置 * 這只是一個一般的結構,具體語言不同,活動記錄的結構和內容也有差異2022/8/23109.1 概述過程的活動(Activation)過程的一次完整執行(第一條語句到最后一條語句),稱為過程的一次活動過程在執行中稱它為活著的如果允許遞歸調用,程序的一次執行可能有同一個過程的多個實例是活著的* 本章主要討論不同語言的目標程序在
5、運行時的存儲分配策略及名字與其左值和右值的關系2022/8/23119.2 存儲分配策略靜態存儲分配(Static allocation)編譯時確定所需的全部數據空間的大小編譯時安排好每個名字的存儲位置(相對地址)采用靜態存儲分配的典型語言是 FORTRAN2022/8/23129.2 存儲分配策略FORTRAN 語言程序是段結構的,主程序段 + 若干子程序(函數)段沒有動態數據類型,每個名字所需空間是確定的沒有遞歸調用,無需棧區沒有動態數據結構(如鏈表),沒有動態內存申請,無需堆區2022/8/23139.2 存儲分配策略因此,編譯時可確定數據區大小,為每個名字分配好地址FORTRAN 程序
6、運行時內存劃分為目標代碼區和靜態數據區,沒有棧區和堆區程序例子:P 402 example 7.4Fig.7.10 Fig.7.11 Fig.7.122022/8/23149.2 存儲分配策略程序設計語言若允許遞歸調用、可變數組、可變數據結構:編譯時無法確定運行時需要的存儲空間大小動態存儲分配包括:棧式分配(Stack allocation)和堆式分配(Heap allocation)只能在運行時動態地確定,采用動態存儲分配2022/8/23159.2 存儲分配策略棧式存儲分配的思想:在運行空間中劃分一塊存儲空間作為棧區程序運行時每當調用一個過程,就將該過程的活動記錄壓入棧中,過程執行完畢將它
7、的活動記錄從棧中彈出例子:P405 Fig.7.132022/8/23169.2 存儲分配策略棧式存儲分配的實現反映在目標代碼生成器的構造策略中,最終體現在生成的目標代碼中調用序列(Call Sequence)目標代碼中的一個指令序列,完成調用一個過程的一系列操作,包括為被調用過程分配一個活動記錄,并在相應的域中填入信息2022/8/23179.2 存儲分配策略返回序列(Return Sequence)目標代碼中的一個指令序列,完成從一個被調用過程返回到它的調用過程的一系列操作,包括釋放被調用過程的活動記錄,并復制出返回值具體內容:P407 Fig.7.142022/8/23189.2 存儲分
8、配策略有些程序設計語言允許用戶自由申請內存空間,如 C 的 malloc 和 free,PASCAL 的 new 和 dispose何時申請何時釋放由用戶決定有些程序設計語言在進行數據空間分配時不服從棧式的存儲分配原則(即“先申請后釋放、后申請先釋放”)2022/8/23199.2 存儲分配策略這時采用堆式存儲分配方案運行空間劃分一塊堆區用戶(顯式)或目標代碼需要時從這堆中借用一塊,不用時退還* 這是一種完全動態的存儲分配方案2022/8/23209.3 訪問非局部名字非局部名字相對于引用點所在的過程或分程序來說的程序執行時引用的在當前過程(分程序)之外定義的變量稱為非局部名字* 本節主要討論
9、棧式存儲分配中如何訪問非局部名字2022/8/23219.3 訪問非局部名字最近嵌套的作用域規則 (most closely nested rule)P 412 這是大多數程序設計語言采用的作用域規則例子:P416 Fig.7.22(過程)例子:P413 Fig.7.18(塊或分程序)2022/8/23229.3 訪問非局部名字分程序(塊)結構 ALGOL 和 C分程序(塊)含有局部數據說明的語句序列有定界符號,允許嵌套例子:P413 Fig.7.182022/8/23239.3 訪問非局部名字過程(活動記錄)采用棧式存儲分配,分程序中的局部數據在活動記錄的局部數據區內也采用棧式分配并列的分程
10、序中的名字可分配同一個地址,因為它們所屬的分程序不會在同一時刻存活訪問同一過程中的局部名字可以從棧頂到棧底進行定位(同一活動記錄中)Fig.7.19* 訪問其它過程中的局部名字見下面的討論2022/8/23249.3 訪問非局部名字無過程嵌套定義 C程序中引用的名字或者在當前的過程中被定義,或者在所有過程之外被定義在所有過程之外被定義的變量,稱之為全局變量,被存放在靜態數據區,地址在編譯時刻確定(放符號表中)2022/8/23259.3 訪問非局部名字過程中的局部名字聯編到過程的活動記錄的局部數據區中訪問非局部名字可根據符號表中該變量的地址直接到全局靜態數據區中查找2022/8/23269.3
11、 訪問非局部名字有過程嵌套定義 PASCALPASCAL語言的一個例子 P416過程和函數的嵌套深度(nesting depth)訪問非局部名字的方法有兩種,一種是通過存取鏈,一種是通過 DISPLAY 表主程序為 1 2022/8/23279.3 訪問非局部名字存取鏈(access links)活動記錄中的一個區,是一個指針若過程 P 直接嵌入在過程 Q 中,則 P 的活動記錄中的存取鏈指向 Q 的最近的活動記錄中的存取鏈2022/8/23289.3 訪問非局部名字如何建立存取鏈?參見 P417 Fig. 7.23(a)(b)(c)(d)區分兩種情況: P4181、Np = Nx NpNx+
12、1 2022/8/23299.3 訪問非局部名字如何利用存取鏈訪問非局部名字?根據當前過程的嵌套深度和非局部名字所在過程的嵌套深度,可以計算出需順著存取鏈前進的步數,從而對非局部名字進行訪問 NpNa2022/8/23309.3 訪問非局部名字DISPLAY表是一個指向活動記錄的指針數組運行時刻要訪問的嵌套深度為 i 的非局部名字就在 d i 所指的活動記錄中這種方法只要一步就可到達要訪問的非局部名字的活動記錄,比存取鏈方法高效2022/8/23319.3 訪問非局部名字如何建立與維護 DISPLAY 表?DISPLAY 表的大小由程序中嵌套深度最大的過程決定參見 P421 Fig.7.26
13、(a)(b)(c)(d)2022/8/23329.3 訪問非局部名字當建立嵌套深度為 i 的過程的活動記錄時,首先在新的活動記錄中保存 d i 的值,然后置 d i 指向新的活動記錄注意考慮調用和返回兩種情況當從過程中返回時,從活動記錄中恢復老的 d i 的值2022/8/23339.4 參數傳遞傳值調用(Call-by-Value)把實在參數的右值傳遞給形式參數調用序列計算實在參數的值,并將它復制到被調用過程活動記錄的參數域中這種參數傳遞方法對調用過程的活動記錄沒有影響2022/8/23349.4 參數傳遞引用調用(Call-by-Reference)把實在參數的左值(地址)傳遞給形式參數調用序列將實在參數的左值(地址)復制到被調用過程活動記錄的參數域中被調用過程對形式參數的引用其實是對實在參數的地址(在被調用過程的活動記錄中)進行引用2022/8/23359.4 參數傳遞復制恢復(Copy-Restore)傳遞參數同傳值調用在從被調用過程返回前,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度按摩院建設項目施工與監理合同
- 纖支鏡止血護理
- 環境保護教育說課
- 愛國衛生健康教育主題班會
- 新版房地產租賃合同模板
- 2024浙江省三門縣職業中等專業學校工作人員招聘考試及答案
- 2024深圳市福田區華強職業技術學校工作人員招聘考試及答案
- 2024靈臺縣職業中等專業學校工作人員招聘考試及答案
- 職務職級并行培訓
- 物業各部門管理思路
- 2024年中國資源循環集團有限公司招聘筆試真題
- 行政管理本科畢業論文-數字政府背景下地方政府治理效能研究
- 危貨車輛防汛救援應急預案
- 電信運營商網絡升級計劃
- 2025年全國國家版圖知識競賽(中小學組)題庫及答案
- 2025年春季四年級下冊語文第15課《白鵝》課件(統編版)
- 2025年山東能源集團高校畢業生校園招聘筆試參考題庫附帶答案詳解
- 社區商業中心公共設施的規劃與運營管理
- 2024年河南省中職英語對口高考試題
- 政治-山東省濰坊市2025屆高三2月開年診斷調研監測考試試題和答案
- 課件-DeepSeek從入門到精通
評論
0/150
提交評論