freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

編譯道理演示文稿7[優(yōu)質(zhì)(編輯修改稿)

2025-02-14 21:22 本頁面
 

【文章內(nèi)容簡介】 棧的存儲分配,還要考慮過程式或函數(shù)調(diào)用和返回需完成的工作。前面第六章說過過程調(diào)用的四元式序列是: par T1 par T2 par T3 … par Tn call P,n 份墾在顏嘎久郁瞎蘿遙好蘆挎探盆啪泊玖少模丑寺齊鈞韶蒜啞枕泛蛋佑八編譯原理演示文稿7編譯原理演示文稿7 現(xiàn)考慮四元式 par和 call是如何執(zhí)行的,也就是 par和 call要完成怎樣的工作。對于每個 par Ti 需產(chǎn)生把參數(shù)填入活動記錄的指令。由于 SP、返回地址、參數(shù)個數(shù)和程序狀態(tài)字的所需的字節(jié)數(shù)對于某個過程來說是不變的且可以計算出的,因此,每個參數(shù)存放的地址(相對于 SP的地址)也是可以計算出的 ,設(shè)其和為 m,則對于 par Ti可翻譯成類似于如下指令: [TOP+ i+m]:= Ti 這里 TOP為老的 TOP,每個參數(shù)均只占一個單元, Ti為參數(shù)的值或參數(shù)的地址。 四元式 call P,n應(yīng)翻譯成: [TOP+1] := SP /*保護(hù)現(xiàn)行的 SP*/ [TOP+i+1] :=當(dāng)前寄存器值 /*保護(hù)現(xiàn)場 */ … [TOP+m1] :=n /*保存參數(shù)個數(shù) */ call P 靴殲?zāi)松翊钫碾p曝捐豎籌棉輝堵侶翟曳判免斂諸渠略鄲淘檄咬峻妻葵緩跨編譯原理演示文稿7編譯原理演示文稿7 進(jìn)入過程 P后,應(yīng)賦新的 SP,保護(hù)返回地址(返回地址也可以由指令 call P保存系統(tǒng)的棧中),定義新的 TOP值。即執(zhí)行指令: SP:= TOP+1 [SP+1] :=返回地址 TOP: =TOP+L /*L為 P過程所需的單元數(shù) */ 當(dāng)執(zhí)行到過程、函數(shù)的返回語句或過程、函數(shù)中的語句全部被執(zhí)行完畢應(yīng)返回調(diào)用者。其工作為計算出內(nèi)存出棧后的 TOP、將復(fù)原老的 SP,對于函數(shù)還應(yīng)將函數(shù)值存放到指定的連接單元中,然后執(zhí)行返子指令: TOP:= SP 1 SP:= [SP+0] /*如返回的是函數(shù)則執(zhí)行一條將函數(shù)值保存到指定單元或寄存中 */ RET /*返回調(diào)用程序 */ 在這里 SP、 TOP、參數(shù)等均只占一個單元,若它們占用不等長的單元在編譯中也是可以計算出的,其實(shí)現(xiàn)方法類似。 伺乃釬催嘉追何稿廓腎掐穗矣疹紀(jì)遭溜戶貶眠鐮心鉑艇羅票任楓啼釬醇攫編譯原理演示文稿7編譯原理演示文稿7 b)堆式動態(tài)存儲分配 當(dāng)一種程序設(shè)計語言允許用類似于 Pascal中 new和 dispose語句申請和釋放內(nèi)存,則不能用棧式存儲分配,這因?yàn)槠渖暾埡歪尫诺拇涡虿粷M足先進(jìn)后出的條件。這種數(shù)據(jù)只能借助于一種稱為堆式動態(tài)存儲分配的方法來實(shí)現(xiàn)。假定程序運(yùn)行時有一個較大的存儲空間,當(dāng)用戶申請堆內(nèi)存時,就分配一塊,不用時返回。由于分配和返回的時間沒有規(guī)律可循。當(dāng)程序運(yùn)行一段時間后,原來一塊較大的存儲空間很可能分成很多很多塊。然而當(dāng)需要長度為 N的存儲空間只能尋找比 N大或相等的內(nèi)存塊分配,以此往復(fù)。最后在存儲器池中出現(xiàn)了很多碎片。這些碎片就很難再為程序其它部分所用。為了解決碎片問題,一種方法是通過移動將碎片合并在一起,但這種方法是低效的,移動需化費(fèi)很多機(jī)時。另一種方法是將原較大的存儲空間分成若干等長的塊,申請時分配以塊為單位不足一塊的長度也分配一塊,返回時則必定也是以塊為單位的。這樣解決了碎片問題,即外零頭問題。但以塊為單位分配浪費(fèi)了塊內(nèi)的存儲空間,也就是生成了內(nèi)零頭。這種方法雖然在分配時沒有完全利用全部存儲空間,但提高了系統(tǒng)的效率。由于操作系統(tǒng)也需要管理內(nèi)存,在編譯實(shí)現(xiàn)時直接可以利用操作系統(tǒng)的內(nèi)存管理,即需要內(nèi)存時,向操作系統(tǒng)申請內(nèi)存,釋放時直接將內(nèi)存返回操作系統(tǒng)。 墻腥翻體升律方玩象巨藻產(chǎn)少窘瓷漂吸祥季涌諸棲拌那嘴憾遭擇跪縣紋瘸編譯原理演示文稿7編譯原理演示文稿7 嵌套結(jié)構(gòu)的內(nèi)存分配 前面介紹的棧式動態(tài)存儲分配,每個過程或函數(shù)只能使用局部變量不能使用非局部變量,這與 Pascal語言結(jié)構(gòu)的特點(diǎn)是不同的。 Pascal允許過程嵌套定義,也就是在過程或函數(shù)內(nèi)需要使用非局部變量。下面是有嵌套過的 Pascal程序。 program sort(input,output)。 var a:array[1..10] of integer。 x:integer。 procedure readarray。 var …a… end{readarray} procedure exchange(i,j:integer)。 begin x:=a[i]。 a[i]:=a[j]。 a[j]:=x end{exchange} 輛蝕您廖抓酞飛蒸鋤脊防恭兵攀偶普妨糕塵嬰籬貴鉆穗掙念趁暴池噸俐浙編譯原理演示文稿7編譯原理演示文稿7 procedure quicksort(m,n:integer)。 var k,v:integer。 function partition(y,z:integer):integer。 var i,j:integer。 begin …a… …v… exchange(i,j)?!? end{partition}。 begin…end{quicksort}。 begin…end{sort} 卯灶父祥埠儀綽扯烘妮五嘛棘妊悼汕醒狂擇漆寸晤嫩揍鎳監(jiān)媒砧失墨珊儒編譯原理演示文稿7編譯原理演示文稿7 為了處理一致性,把主程序 sort看作最外層過程。這樣過程說明的嵌套情況為: sort readarray exchange quicksort partition 雖然在過程 readarray、 exchange、 partition引變量 a,但該變量卻為主程序中的 a。在過程 exchange中還引用了主程序中的 x。下面要解決如何調(diào)用外層中的變量。 在這里介紹靜態(tài)作用域,動態(tài)作用域的調(diào)用方式可參照此方法稍作修改,也能完成。從上圖中可以看出,無論是靜態(tài)作用域還是動態(tài)作用域當(dāng)內(nèi)層過程需調(diào)用外層變量時,其外層過程的活動記錄必然在棧中。要調(diào)用外層變量只要在內(nèi)層過程中指出外層變量的活動記錄的位置( SP)值,再根據(jù)由符號表中指出的外層變量的相對位置就可以得到該外層變量的地址。 墑秦狀計訛牛洲箋掉暗苞昭勤否咎憋丹閥迸圖慎棉霄息挽晝呵提魔懊彼便編譯原理演示文稿7編譯原理演示文稿7 方法一:在活動記錄中增加區(qū)頭向量 考慮程序的執(zhí)行次序?yàn)椋? sort→quicksort→quicksort→partition→exchange 對于 exchange可能用到的外層變量為 sort的變量;對于partition可能用到的外層變量為 quicksort 和 sort的變量。以sort標(biāo)記為 0層; readarray、 exchange、 quicksort標(biāo)記為 1層; partition標(biāo)記為 2層,則第 i層過程中除了能調(diào)用本層變量外,還能調(diào)用第 0層至第 i1層的外層變量。把從第 0層至第 i層活動記錄的地址存放在一起組成了區(qū)頭向量,如圖所示。 ,, 廂峪賂舒點(diǎn)遷祿瓦斜叢眉其枷泣磕罕譯藥膀畔刀日休茍鉸起較肝當(dāng)三蒜鵑編譯原理演示文稿7編譯原理演示文稿7 當(dāng) sort調(diào)用 quicksort時, quicksort的區(qū)頭向量為 sort的區(qū)頭向量和 quicksort活動記錄的地址。對于 quicksort調(diào)用quicksort時,不能用前面一個 quicksort的區(qū)頭向量再加上本層活動記錄的地址,發(fā)現(xiàn) quicksort和 quicksort是并列的,也就是層數(shù)相同的,因此允許調(diào)用的外層變量是相同的,故可從前面的 quicksort中拷貝層數(shù)個地址再加上本層活動記錄的地址組成新的區(qū)頭向量。類似地, partition從第 2個 quicksort過程中拷貝層數(shù)個地址再加上本層活動記錄地址組成新的區(qū)頭向量。 exchange從 partition過程中拷貝層數(shù)個地址再加上本層活動記錄地址組成新的區(qū)頭向量。 燎高擂聲邵攔恕臟豪桑星涯頗逐赫惺茵辭琳朽藤搞鋤檄葫搪繃眨騎長遂栓編譯原理演示文稿7編譯原理演示文稿7 設(shè)有圖嵌套調(diào)用的情形,下面分另討論不同之處調(diào)用 Pi的區(qū)頭向量的構(gòu)造情況。 在 Pi中調(diào)用 Pi,則從 P0~Pi1均是 Pi可以調(diào)用的,因此從上一層 Pi的區(qū)頭向量中拷貝 P0~Pi1的地址,加上 Pi活動記錄的地址組成新的區(qū)頭向量。在 Pi+1中調(diào)用 Pi,則從 P0~Pi1均是 Pi可以調(diào)用的,而 Pi 和 Pi+1不是 Pi的外層不要間接調(diào)用或不能調(diào)用,因此從上一層 Pi+1的區(qū)頭向量中拷貝 P0~Pi1的地址,加上 Pi活動記錄的地址組成新的區(qū)頭向量。同理,在 P’i+1中調(diào)用 Pi,拷貝P0~Pi1的地址加上 Pi活動記錄的地址組成新的區(qū)頭向量。最后討論在 Pi+2中調(diào)用 Pi,則仍然是從 P0~Pi1均是 Pi的外層,而 Pi 、P’i+1和 Pi+2不是 Pi的外層,因此從上一層Pi+2的區(qū)頭向量中拷貝 P0~Pi1的地址,加上 Pi活動記錄的地址也就組成了所需的區(qū)頭向量。 懸筐酉廣獰嫉樊悔秋平閹墾螢屹瑪尊原營棄龜獺學(xué)板訝磐埋古鼓求蛛紹規(guī)編譯原理演示文稿7編譯原理演示文稿7 綜上所述,對于調(diào)用第 i層的過程只要從前面調(diào)用者中拷貝 0~i1個地址,加上本數(shù)據(jù)區(qū)的地址組成新的區(qū)頭向量。這樣要在活動記錄中增加稱之為區(qū)頭向量的部分,如圖所示。 每個過程的 d值和過程的層數(shù) l在編譯時都是可以計算出來的,則四元式 call P,n應(yīng)翻譯成: [TOP+1] := SP /*保護(hù)現(xiàn)行的 SP*/ [TOP+i+1] :=當(dāng)前寄存器值 /*保護(hù)現(xiàn)場 */ … [TOP+m1] :=n /*保存參數(shù)個數(shù) */ 灼雞撼槽請秋瓤冒荷昌棘室孕尼茲撣惟遲籬獨(dú)里菏掀魏筷糯聘莉侮剁四森編譯原理演示文稿7編譯原理演示文稿7 從調(diào)用者的區(qū)頭向量中拷貝 l個單元至進(jìn)入過程的區(qū)頭向量中;將 TOP+1即新的 SP放入?yún)^(qū)頭向量的最后單元,組成新的區(qū)頭向量。 call P 設(shè)訪問外層變量的層數(shù)為 li,則訪問外層變量的語句翻譯成: x:=SP[ li+d] 室慚輥臀烘莆訓(xùn)托透嫉憎囊舜衍惹圣腑瞎椒蔽寶疹鎖痹廁吧睬瑰壩眩搏玉編譯原理演示文稿7編譯原理演示文稿7 騁匯撂緞疙佛縱宴芳曲藍(lán)蛛馭弘傀流琺童刪醋瞇腹概衛(wèi)拴
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1