【正文】
} void print(){ Print(On ,day, the price of ,color, ,name, is , price,\n)。 它的優(yōu)點在于:可做出安排以使每個方法都有一個可預(yù)測的偏移量 , 而且也不再需要用一系列表查詢遍歷類的層次結(jié)構(gòu) 。 ? (7) begin f:=m+n end{f}。 (3){ int temp。 swap(a,b);( a,b為 調(diào)用時的 實參 ) 調(diào)用結(jié)果 a,b的值被改變。 (3) begin。第 一,對每個過程或分程序都建立有自己的棧頂指示器 TOP,代替原來僅有過程的棧頂指示器 , 每個 TOP的值保存在各自活動記錄中。 B2:begin real d, e。 – DL: 動態(tài)鏈 ,指向 調(diào)用 該過程前正在運行過 程的數(shù)據(jù)段基地址。 ? 主程序執(zhí)行語句 ? end main Main Q R Main Q Q T O P R 的活動記錄 Q 的活動記錄 S P Q 的活動記錄 Q 的活動記錄 主程序全局 主程序全局 數(shù)據(jù)區(qū) 數(shù)據(jù)區(qū)T O P 臨時工作單元 局部簡單變量 局部數(shù)組的內(nèi)情向量 保存運 行過程前的狀態(tài) (返回地址,寄存器值??) 實參 (形式單元)和參數(shù)個數(shù) S P 控制鏈 (老 SP ) TOP R 的數(shù)組區(qū) S P R 的活動記錄 Q 的活動記錄 主程序全局 數(shù)據(jù)區(qū) 嵌套過程語言的棧式 分配方案 l主要特點 : ? (語言)一個過程可以引用包圍它的任一外層過程所定義的標(biāo)識符(如變量,數(shù)組或過程等)。 ? 動態(tài):如果名字的性質(zhì)只有在程序運行時才能知道,則稱這種性質(zhì)為“動態(tài)”確定的。 l 實參 (形式單元) l 返回值 (對函數(shù)) (有時可使用寄存器存放返回值) 簡單的棧式分配方案 ? 程序結(jié)構(gòu)特點 :過程定義不嵌套,過程可遞歸調(diào)用,含可變數(shù)組 。 write(2*c)。 integer m,n。 例如:如果有一個從第 5層分程序轉(zhuǎn)出到達(dá)第 1層分程序的標(biāo)號 L,雖然在第 5層分程序工作時知道 L所屬的層數(shù),我們極易從DISPLAY中獲得第 1層分程序的活動記錄基址( SP),但是怎么知道第 1層分程序進(jìn)入時的 TOP呢?唯一的辦法是從 5,4,3和 2各層順序退出。 B 的 內(nèi) 情 向 量 Z B1的 T O P D I S P L A Y 形式單元 m , n 2 連 接 數(shù) 據(jù) A 的 T O P ∶ ∶ ( b) 進(jìn) 入 分 程 序 B1。 (12) swap(a,b)。 begin temp:=x。 ? (4)procedure c。其缺點在于:雖然實例變量具有可預(yù)測的偏移量(正如在標(biāo)準(zhǔn)環(huán)境中的局部變量一樣),方法卻沒有,而且它們必須由帶有查詢功能的符號表結(jié)構(gòu)中的名字維護(hù)。} void print(){ Print(On ,day, the price of ,name, is ,price,\n)。 (100,apple)。 void f1(){…} } class B extends A {void f2(){…} } class C entends B {void f2(){…} } class D extends C{bool m2。 ? (9)begin ? (10) c ? (11)end 嵌套過程作為參數(shù)傳遞 p a r a m c 存取鏈 m b f . 存取鏈 連同存取鏈一起 傳遞過程實參 堆式動態(tài)存儲分配 ? 需求: – 一個程序語言允許用戶自由地申請數(shù)據(jù)空間和退還數(shù)據(jù)空間,或者不僅有過程而且有進(jìn)程( process)的程序結(jié)構(gòu), ? 操作: – 堆提供兩個操作,分配操作和釋放操作 ? 情況 : – 經(jīng)一段運行時間之后,這個大空間就必定被分劃成許多塊塊,有些占用,有些無用(空閑) 碎片問題 程序語言允許用戶自由地申請數(shù)據(jù)空間和退還數(shù)據(jù)空間 ? C++語言中 new操作符施加在一個類型標(biāo)識符上 ( 包括類名 ) ? Pascal語言中 , 標(biāo)準(zhǔn)過程 new能夠動態(tài)建立存儲空間并相應(yīng)地置上指針 。 *y=temp。 swap(a,b); 其結(jié)果: a,b調(diào)用前的值不改變。 a[j]:=x (5) end。每個分程序都隸屬于某個確定的過程,分程序的層次是相對于它所屬的那個過程進(jìn)行編號的。 1 B5:begin real e。 程序結(jié)構(gòu)圖 ?? pr oc R( c , d)。 ? 設(shè)法跟蹤每個外層過程的最新活動記錄AR的位置。 ? array B[m:n]。 一個過程的一次執(zhí)行所需要的信息使用一個連續(xù)的存儲區(qū)來 管理,這個區(qū) (塊)叫做一個活動記錄 AR或 frame 幀 一般這個段要記錄: l 臨時值,如計算表達(dá)式時的中間工作單元。 end。 ?全局 DISPLAY地址 棧式存儲組織 review 數(shù)據(jù)空間的存儲管理:棧式存儲分配 – 過程 (函數(shù) )的活動記錄:是一段連續(xù)的存儲區(qū),存放過程 (函數(shù) )的一次執(zhí)行所需要的信息。 一則,每逢進(jìn)入 一個分程序,就照樣建立連接數(shù)據(jù)和 DISPLAY表 ,這是不必要的。 對于每個分程序來說,它們包括: ( 1)分程序的 TOP值。 (8) y:=temp (9) end。 x:=y;