【文章內(nèi)容簡(jiǎn)介】
存放過程 (函數(shù) )的一次執(zhí)行所需要的信息。 – 過程 (函數(shù) )活動(dòng)記錄的內(nèi)容:聯(lián)系單元(靜態(tài)鏈 ,動(dòng)態(tài)鏈和返回地址)、局部變量和臨時(shí)變量 棧式存儲(chǔ)分配的實(shí)現(xiàn): ? 設(shè)置兩個(gè)指針:棧頂指針 Top和當(dāng)前活動(dòng)記錄指針 SP; ? 調(diào)用一個(gè)過程 (函數(shù) )前,先把過程 (函數(shù) )的參數(shù)壓入數(shù)據(jù)棧; ? 在數(shù)據(jù)棧中為過程 (函數(shù) )的活動(dòng)記錄分配空間; ? 填寫聯(lián)系單元內(nèi)容; ? 執(zhí)行過程 (函數(shù) )代碼; ? 過程 (函數(shù) )返回前,根據(jù)當(dāng)前 SP恢復(fù) Top指針,根據(jù)動(dòng)態(tài)鏈恢復(fù) SP為外層過程 (函數(shù) )的活動(dòng)記錄起始地址,根據(jù)返回地址得到下一條指令地址; ? 繼續(xù)執(zhí)行外層過程 (函數(shù) )代碼。 過程的活動(dòng)記錄 (AR) C PL0 臨時(shí)工作單位 √ √ 局部變量 √ √ 機(jī)器狀態(tài)信息 存取鏈 √ 控制鏈 √ √ 實(shí)參 √ 返回地址 √ √ 過程 R的活動(dòng)記錄 過程 Q的活動(dòng)記錄 過程 P的活動(dòng)記錄 主程序全局?jǐn)?shù)據(jù)區(qū) 分程序結(jié)構(gòu) Procedure A(m,n)。 integer m,n。 B1:begin real z。 array B[m:n]。 B2:begin real d, e。 L3: 2 end。 B4:begin array C[1:m]。 1 B5:begin real e。 L6: 5 4 end。 end。 L8:end。 分程序結(jié)構(gòu)的存儲(chǔ) 分配方案 處理分程序結(jié)構(gòu)存儲(chǔ)分配方案的一種簡(jiǎn)單辦法是,把分程序看成 “無(wú)名無(wú)參過 程”,它在哪里定義就在哪里被調(diào)用。因此,可以把處理過程的存儲(chǔ)辦法應(yīng)用到處理分程序中。但這種做法是極為低效的。 一則,每逢進(jìn)入 一個(gè)分程序,就照樣建立連接數(shù)據(jù)和 DISPLAY表 ,這是不必要的。 二則 ,當(dāng)從內(nèi)層分程序向外層轉(zhuǎn)移時(shí),可能同時(shí)要結(jié)束若干個(gè)分程序。 按照過程處理辦法,意味著必須一層一層地通過“返回” 來(lái)恢復(fù)所要到達(dá)的那個(gè)分程序的數(shù)據(jù)區(qū),但不能直接到達(dá)。 例如:如果有一個(gè)從第 5層分程序轉(zhuǎn)出到達(dá)第 1層分程序的標(biāo)號(hào) L,雖然在第 5層分程序工作時(shí)知道 L所屬的層數(shù),我們極易從DISPLAY中獲得第 1層分程序的活動(dòng)記錄基址( SP),但是怎么知道第 1層分程序進(jìn)入時(shí)的 TOP呢?唯一的辦法是從 5,4,3和 2各層順序退出。但這種辦法是很浪費(fèi)時(shí)間的。 為了解決上述問題,可采取兩種措施。第 一,對(duì)每個(gè)過程或分程序都建立有自己的棧頂指示器 TOP,代替原來(lái)僅有過程的棧頂指示器 , 每個(gè) TOP的值保存在各自活動(dòng)記錄中。這樣,上述的第二個(gè)問題便可解決。第二,不把分程序看作“無(wú)參過程”,每個(gè)分程序享用包圍它的那個(gè)最近過程的 DISPLAY。每個(gè)分程序都隸屬于某個(gè)確定的過程,分程序的層次是相對(duì)于它所屬的那個(gè)過程進(jìn)行編號(hào)的。 : 每個(gè)過程被當(dāng)作是 0層分程序。而過程體分程序(假定是一個(gè)分程序)當(dāng)作是它所管轄的第 1層分程序。 這樣,每個(gè)過程的活動(dòng)記錄所含的內(nèi)容有: TOP值,它指向過程活動(dòng)記錄的棧頂位置。 ,共四項(xiàng): ( 1)老 SP值; ( 2)返回地址; (3)全局 DISPAY地址; ( 4)調(diào)用時(shí)的棧頂單元地址,老 TOP。 3. 參數(shù)個(gè)數(shù)和形式單元 4. DISPAY表。 5. 過程所轄的各分程序的局部數(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í)工作單元。 變 量 e B5 的 T O P 數(shù) 組 C 的 內(nèi) 情 向 量 變 量 e 和 d B4 的 T O P B2的 T OP 數(shù) 組 B 的 內(nèi) 情 向 量 變 量 zK B1 的 T O PD D I S P L A Y6 形 式 單 元 m ,n5 參 數(shù) 個(gè) 數(shù): 24 調(diào) 用 時(shí) 的 棧 頂 地 址 (老 T O P )3 全 局 D I S P L A Y 地 址2 返 回 地 址1 老 S P0 過 程 的 T O P ,指 向 活 動(dòng) 記 錄 之 頂 D I S P L A Y 形式單元 m , n 2 連 接 數(shù) 據(jù) A 的 T O P ∶ ∶ (a) 到 達(dá) 標(biāo) 號(hào) B1處 。 B 的 內(nèi) 情 向 量 Z B1的 T O P D I S P L A Y 形式單元 m , n 2