第十章目標程序運行時的存儲組織.ppt_第1頁
第十章目標程序運行時的存儲組織.ppt_第2頁
第十章目標程序運行時的存儲組織.ppt_第3頁
第十章目標程序運行時的存儲組織.ppt_第4頁
第十章目標程序運行時的存儲組織.ppt_第5頁
免費預覽已結(jié)束,剩余19頁可下載查看

付費下載

下載本文檔

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

文檔簡介

1、第10章 目標程序運行時的存儲組織,學習目標: 掌握:參數(shù)傳遞的幾種方式 理解:靜態(tài)存儲分配、棧式動態(tài)存儲分配、堆式動態(tài)存儲分配的基本思想,目標程序運行時的存儲組織 存儲分配是在運行階段進行的; 但編譯程序在編譯階段要為其設計好存儲組織形式,并將這種組織形式通過生成的目標代碼體現(xiàn)出來; 運行階段,隨著目標代碼的運行,數(shù)據(jù)的存儲組織形式便得以實現(xiàn)。,目標程序運行時的存儲組織要解決的問題: 把靜態(tài)的源程序與程序運行時的動態(tài)活動聯(lián)系起來,即運行中的程序信息是如何進行存儲和訪問的。 在程序執(zhí)行過程中,程序中數(shù)據(jù)的存取是通過對應的存儲單元來進行的 存儲組織就是要在編譯階段為源程序中出現(xiàn)的用戶定義的變量與

2、常量、臨時工作單元、過程或函數(shù)調(diào)用時需要的連接單元與返回地址等分配其在運行階段的存儲空間,10.1 運行時的存儲空間結(jié)構(gòu) 10.2運行時的存儲空間分配 10.3參數(shù)傳遞,10.1 運行時的存儲空間結(jié)構(gòu),當程序運行時,存儲區(qū)的內(nèi)容包括: 目標代碼 目標代碼的大小在編譯時可以靜態(tài)確定,因此可以把它放在靜態(tài)確定的區(qū)域; 目標代碼運行時的數(shù)據(jù)空間 數(shù)據(jù)空間包括:用戶定義的各種類型的數(shù)據(jù)對象;臨時工作單元;輸入/輸出緩沖區(qū)等 數(shù)據(jù)空間有三種組織形式:靜態(tài)數(shù)據(jù)區(qū)、棧區(qū)和堆區(qū),目標代碼區(qū)(code); 靜態(tài)數(shù)據(jù)區(qū)(static data):用于存放編譯時能確定所占用空間的數(shù)據(jù),如全局變量和靜態(tài)變量 堆棧區(qū)(

3、stack and heap):用于存放編譯時不能確定所占用空間的數(shù)據(jù),如可變數(shù)據(jù)以及管理過程活動的控制信息,運行時的存儲空間結(jié)構(gòu)如下:,自由空間,10.2 運行時的存儲空間分配,影響分配策略的因素: 源語言的結(jié)構(gòu)特點 源語言的數(shù)據(jù)類型 源語言中決定名字作用域的規(guī)則 編譯器具體實現(xiàn)時,采用如下三種分配策略之一或三種的混合形式。這三種方式是: 靜態(tài)存儲分配 棧式動態(tài)存儲分配 堆式動態(tài)存儲分配,10.2.1 靜態(tài)存儲分配,指在編譯時對數(shù)據(jù)對象分配固定的存儲位置,運行時始終不變。即一旦存儲空間的某個位置分配給了某個數(shù)據(jù)名,則在目標程序的整個運行過程中,此位置(地址)就屬于該數(shù)據(jù)名。 由靜態(tài)存儲分配產(chǎn)

4、生的數(shù)據(jù)區(qū)稱為靜態(tài)數(shù)據(jù)區(qū)。 靜態(tài)存儲分配適用于不允許遞歸過程或遞歸調(diào)用,不允許可變體積的數(shù)據(jù)結(jié)構(gòu)的語言 靜態(tài)存儲分配的特點:簡單、易于實現(xiàn) 例:FORTRAN語言,它所有的數(shù)據(jù)都屬于這一類。,例:FORTRAN程序 主程序段 Program CNSUME 子程序段 Character function PRDUCE() ,10.2.2 動態(tài)存儲分配,指在運行階段動態(tài)地為源程序中的數(shù)據(jù)對象分配存儲位置 實行動態(tài)存儲分配的語言的特點: 允許遞歸過程 允許可變數(shù)據(jù)結(jié)構(gòu)(可變數(shù)組或記錄等) 允許用戶自由申請和釋放空間 這種程序在編譯時無法確定運行時所需數(shù)據(jù)空間的大小,需待程序運行時動態(tài)確定 有兩種動態(tài)

5、存儲分配方式:棧式(stack)、堆式(heap)。,10.2.3 棧式動態(tài)存儲分配,在數(shù)據(jù)空間中開辟一個棧區(qū),每當調(diào)用一個過程時,它所需要的數(shù)據(jù)空間就分配在棧頂,每當過程工作結(jié)束時就釋放這部分空間??臻g的使用符合先借后還的原則。 特點:先借后還,管理簡單,空間使用效率高 棧式動態(tài)存儲分配適合于PASCAL、C等典型過程式語言。,Program main; 全局變量定義; Procedure R; End(R); Procedure Q; End(Q); 主程序執(zhí)行體 End.(main),若主程序調(diào)用Q,Q遞歸調(diào)用自己,在Q第二次進入運行后的存儲結(jié)構(gòu)為:,10.2.4 堆式動態(tài)存儲分配,在數(shù)

6、據(jù)空間中開辟一片連續(xù)的存儲區(qū)(通常叫做堆),每當需要時就從這片空間借用一塊,不用時再退還。借用與歸還未必服從“先借后還”的原則。 堆式動態(tài)存儲分配適合于用戶可以自由申請和歸還數(shù)據(jù)空間的語言,如C+。 特點:適用范圍廣,容易出現(xiàn)碎片。 如何充分利用空間是個難題。,作為存儲分配組織的一個原則,能在編譯時完成的存儲分配盡量采用靜態(tài)分配方案,避免目標程序中攜帶許多用于存儲分配的指令,以提高目標代碼的效率。,10.3 參數(shù)傳遞,過程(函數(shù))是結(jié)構(gòu)化程序設計的主要手段,同時也是節(jié)省程序代碼和擴充語言能力的主要途徑。 當一個過程調(diào)用其他過程時,調(diào)用與被調(diào)用之間的通信或者通過全局量,或者由參數(shù)傳遞。 掌握編譯

7、器使用的參數(shù)傳遞的方法很重要,它們直接影響程序運行的結(jié)果。,過程定義 procedure SWAP(n, m: real); var j: real; begin j:=n; n:=m; m:=j end;,參數(shù)傳遞的例子:,主程序 i:=5; ki:=6; SWAP(i, ki);過程調(diào)用 ,1. 參數(shù),參數(shù) 過程定義中的參數(shù)稱為形式參數(shù),簡稱形參。 過程調(diào)用中的參數(shù)稱為實在參數(shù),簡稱實參。 實參可以是變量、常量或較復雜的表達式,應與相應的形參在性質(zhì)上相容。 參數(shù)傳遞常用的三種途徑: 傳值 (call by value),也稱值調(diào)用 傳地址 (call by reference),也稱引用調(diào)

8、用 傳名 (call by name),也稱“換名”,2. 傳值,將實參的值計算出來,然后把它傳給被調(diào)過程 傳值的實現(xiàn): 1.在被調(diào)過程的數(shù)據(jù)空間中為每個形參開辟一個形式單元(用以存放相應的實參值)。 2.調(diào)用過程計算實參的值,并將其值放在對應的形式單元中。 3.被調(diào)用過程執(zhí)行時,每當訪問(引用或賦值)形參時都處理成對形式單元的直接訪問。 特點: 對形式參數(shù)的任何運算不影響調(diào)用過程中的實參的值,例 過程定義 procedure SWAP(n, m: real); var j: real; beginj:=n; n:=m; m:=j end; 主程序 i:=5; ki:=6; SWAP(i, k

9、i);過程調(diào)用,過程調(diào)用時,有 (假設i的地址為add_i),執(zhí)行了語句”j:=n;n:=m;m:=j”后,結(jié)果:i=5,k5=6 不變,未交換,3. 傳地址,將指向?qū)崊⒋鎯ξ恢玫闹羔槀鹘o被調(diào)用過程 傳地址的實現(xiàn): 1.在被調(diào)過程的數(shù)據(jù)空間中為每個形參開辟一個形式單元(用以存放相應實參的地址)。 2.調(diào)用過程將實參的地址放在對應的形式單元中。若實參是一個表達式(包括常數(shù)),例如a+b或2,先對表達式求值,并將值存入某一位置,然后將該位置的地址放在形式單元中 3.被調(diào)用過程執(zhí)行時,每當訪問(引用或賦值)形參時都處理成對形式單元的間接訪問。 特點: 對形式參數(shù)的運算影響調(diào)用過程中的實參的值,例 過

10、程定義 procedure SWAP(n, m: real); var j: real; beginj:=n; n:=m; m:=j end; 主程序 i:=5; ki:=6; SWAP(i, ki);過程調(diào)用,過程調(diào)用時,有 (假設i的地址為add_i),執(zhí)行了語句”j:=n;n:=m;m:=j”后,結(jié)果:i=6,k5=5正確交換,4. 傳名,過程調(diào)用的作用相當于把被調(diào)用段的過程體抄到調(diào)用出現(xiàn)的位置,但把其中形式參數(shù)名換成相應的實在參數(shù)名。 傳名的實現(xiàn): 1.在被調(diào)過程的數(shù)據(jù)空間中為每個形參開辟一個形式單元(用以存放相應實參子程序的入口地址)。 2.為每個實參設置一個計算實參地址和值的子程序(稱為參數(shù)子程序),并將其入口地址放在對應的形式單元中。 3.被調(diào)用過程執(zhí)行時,每當訪問(引用或賦值)形參時就按實參子程序的入口地址調(diào)用相應的參數(shù)子程序計算出當時實參的值(供引用)或地址(供賦值)。,例 過程定義 procedure SWAP(n, m: real); var j: real; beginj:=n; n:=m; m:=j end;,主程序 i:=5; ki:=6; SWAP(i, ki);過程調(diào)用 ,傳名的結(jié)果: 相當于把SWAP(

溫馨提示

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

評論

0/150

提交評論