運行時的存儲組織及管理 課件_第1頁
運行時的存儲組織及管理 課件_第2頁
運行時的存儲組織及管理 課件_第3頁
運行時的存儲組織及管理 課件_第4頁
運行時的存儲組織及管理 課件_第5頁
已閱讀5頁,還剩67頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

運行時的存儲組織及管理12/22/20222004年12月28日1運行時的存儲組織及管理12/19/20222004年12月2編譯器的應用模型出錯處理語法分析程序語義分析程序目標代碼生成程序詞法分析程序中間代碼生成程序代碼優(yōu)化程序表格管理編譯的前端(FrontEnd)編譯的后端(BackEnd)12/22/20222編譯原理編譯器的應用模型出語法分析程序語義分析程序目標代碼生成程序詞運行時的存儲組織及管理概述存儲組織運行時的存儲分配策略靜態(tài)存儲分配動態(tài)存儲分配對非局部名字的訪問參數(shù)傳遞12/22/20223編譯原理運行時的存儲組織及管理概述12/19/20223編譯原理運行時的存儲組織及管理 計算環(huán)境運行時的環(huán)境計算目標代碼當詞法分析掃描得到標識符,并將它填入符號表的過程中需要給識別出來的標識符分配內存空間。源程序由一組過程按某種規(guī)則組成。過程的一次執(zhí)行稱作一次活動。在過程的語句序列執(zhí)行之前,過程中訪問的對象構成此過程的運行環(huán)境,由運行支持程序組織好。編譯程序根據(jù)如何組織運行環(huán)境而生成目標代碼。映射源程序12/22/20224編譯原理運行時的存儲組織及管理 計算環(huán)境運行時環(huán)境的作用目標程序運行時所需存儲空間的組織與管理以及源程序中變量存儲空間的分配。12/22/20225編譯原理運行時環(huán)境的作用目標程序運行時所需存儲空間的組織與管理以及源有關源程序中的一些問題問題的提出:如何構造運行程序的策略和方法過程活動樹控制棧說明的作用域名字的綁定構造運行程序和源程序有關的一些問題12/22/20226編譯原理有關源程序中的一些問題問題的提出:如何構造運行程序的策略和方過程源程序由一組過程組成,不同的程序設計語言,由過程構成源程序的方法不同。構成源程序的兩個過程行文,要么是嵌套的,要么是不相交的。12/22/20227編譯原理過程源程序由一組過程組成,不同的程序設計語言,由過程構成源程programsort(input,output); vara:array[0..10]ofinteger; procedurereadarry; vari:integer; begin fori:=1to9doread(a[i]) end; functionpartition(y,z:integer):integer; vari,j,x,v:integer; begin…… end; procedurequicksort(m,n:integer) vari:integer; begin if(n>m)thenbegin i:=partition(m,n);

quicksort(m,i-1);

quicksort(i+1,n) end end begin a[0]:=-9999;a[10]:=9999;

readarray; quicksort(1,9) end12/22/20228編譯原理programsort(input,output);12活動樹程序執(zhí)行期間的控制流:程序執(zhí)行的控制是連續(xù)的:在任何一步,控制都處于程序的某一點過程的每一次執(zhí)行都是從過程體的開頭開始,并最終把控制返回到緊接著該過程被調用點的后面。過程的一次活動:過程體的每一次執(zhí)行。過程p的一次活動的生存期:在該過程體的執(zhí)行中的第一步和最后一步之間的一序列步驟的執(zhí)行時間,其中包括執(zhí)行過程p所調用的過程的執(zhí)行時間,以及這些過程所調用的過程的執(zhí)行時間,如此等等。一個過程是遞歸的,如果同一過程的一次新的活動可以在前面活動結束以前開始。12/22/20229編譯原理活動樹程序執(zhí)行期間的控制流:12/19/20229編譯原理活動樹為什么過程的活動可以用樹形結構描述?過程活動的特點:每當控制流從過程p的活動進入到過程q的活動中后,它將返回到過程p的同一次活動中。也就是說,如果a和b是兩個過程活動,那么它們的生存期要么是不重疊的,要么是嵌套的。在樹形結構中,節(jié)點間的關系就反映了過程之間的關系:父子關系:嵌套兄弟關系:先后12/22/202210編譯原理活動樹為什么過程的活動可以用樹形結構描述?12/19/202活動樹用一顆樹來描繪控制進入和離開活動的途徑。這祥的樹稱作活動樹。每個節(jié)點代表過程的一個活動根節(jié)點代表主程序的活動當且僅當控制流從活動a進入活動b時,節(jié)點a是b的父節(jié)點當且僅當a的生存期先于b的生存期時,a節(jié)點處于b結點的左邊一個結點代表一個唯一的活動,且每一個活動只有一個結點表示,當控制進入某一個活動時,可以直接說,控制在這個結點上。12/22/202211編譯原理活動樹用一顆樹來描繪控制進入和離開活動的途徑。這祥的樹稱作活programsort(input,output); vara:array[0..10]ofinteger; procedurereadarry; vari:integer; begin fori:=1to9doread(a[i]) end; functionpartition(y,z:integer):integer; vari,j,x,v:integer; begin…… end; procedurequicksort(m,n:integer) vari:integer; begin if(n>m)thenbegin i:=partition(m,n);

quicksort(m,i-1);

quicksort(i+1,n) end end begin a[0]:=-9999;a[10]:=9999;

readarray; quicksort(1,9) endsrq(1,9)p(1,9)q(1,3)p(1,3)q(1,0)q(2,3)p(2,3)q(2,1)q(3,3)q(5,9)12/22/202212編譯原理programsort(input,output);sr控制棧程序的控制流對應于從活動樹根節(jié)點開始的深度優(yōu)先遍歷。(從左至右)活動樹表示了完整的程序控制的先后順序。在真正運行過程中,活動樹并不是真實存在的數(shù)據(jù)結構。在程序運行過程中,我們只需要保存那些活躍著的過程。——控制??刂茥5幕舅枷耄寒斠粋€活動開始執(zhí)行時,把代表這個活動的結點推進棧;當這個活動結束時,把代表這個活動的結點從棧中彈出??刂茥V荒鼙硎净顒訕涞囊徊糠只顒訕渲皇沁壿嬌洗嬖诘摹愃朴谡Z法分析樹12/22/202213編譯原理控制棧程序的控制流對應于從活動樹根節(jié)點開始的深度優(yōu)先遍歷。(棧和活動樹的變化ssrSrq(1,9)Sq(1.9)p(1,9)Sq(1.9)p(1,9)q(1,3)Sq(1.9)q(1,3)p(1,3)Sq(1.9)q(1,3)p(1,3)q(1,0)Sq(1.9)q(1,3)q(1,0)q(2,3)Sq(1.9)q(1,3)q(2,3)12/22/202214編譯原理棧和活動樹的變化ssrSrq(1,9)Sq(1.9)p控制??刂茥V械幕顒佣际腔钴S的,當前控制進入的活動在棧頂,從棧頂活動到棧底活動的活動序列是從活動樹上當前結點通向根的路徑上的結點序列。從棧底活動到棧頂活動的活動序列表示了活動的生存期的嵌套關系。結論:擴充控制棧可用來實現(xiàn)如Pascal語言的棧式存儲分配。(控制棧中存儲活動記錄)12/22/202215編譯原理控制??刂茥V械幕顒佣际腔钴S的,當前控制進入的活動在棧頂,從聲明的作用域聲明語句是把名字與名字的屬性信息綁定在一起的語法結構。說明的作用域是一個說明起作用的范圍——(源程序行文)。一個名字在源程序行文中可能有幾處說明,語言的作用域規(guī)則規(guī)定了在語句序列中引用的一個名字是在何處說明的名字。編譯時,處理說明時,把名字及其屬性信息填寫進符號表;處理引用時,查找這個名字的屬性信息,符號表管理程序根據(jù)語言的作用域規(guī)則,返回其作用域中綁定的屬性信息。12/22/202216編譯原理聲明的作用域聲明語句是把名字與名字的屬性信息綁定在一起的語法名字與存儲的綁定名字與存儲單元的綁定是指把源程序中的數(shù)據(jù)名字映射到目標機存儲單元的過程。環(huán)境把名字映射到一個存儲單元上;狀態(tài)把存儲單元映射到那里所存放的值上?;蛘哒f,環(huán)境把一個名字映射為一個左值,而狀態(tài)把一個左值映射為一個右值。12/22/202217編譯原理名字與存儲的綁定名字與存儲單元的綁定是指把源程序中的數(shù)據(jù)名字名字與存儲的綁定名字存儲單元值存儲分配程序運行環(huán)境狀態(tài)l-valuer-value12/22/202218編譯原理名字與存儲的綁定名字存儲單元值存儲分配程序運行環(huán)境狀態(tài)l-v靜態(tài)概念動態(tài)對應過程定義過程活動名字說明名字的綁定說明的作用域活動的生存期12/22/202219編譯原理靜態(tài)概念動態(tài)對應12存儲組織運行時刻內存的劃分:假定編譯器從操作系統(tǒng)得到一塊存儲區(qū),運行時的存儲空間要劃分成塊:生成的目標代碼;數(shù)據(jù)對象;記錄過程活動的控制棧對應的數(shù)據(jù)結構12/22/202220編譯原理存儲組織運行時刻內存的劃分:假定編譯器從操作系統(tǒng)得到一塊存儲目標代碼靜態(tài)數(shù)據(jù)棧堆1.編譯后知道目標代碼的大小。——放入靜態(tài)確定的區(qū)域中2.某些數(shù)據(jù)對象的長度也可以在編譯時知道,也可以放在靜態(tài)區(qū)域中。主程序中的數(shù)據(jù):c,FORTRAN3.?!刂茥#篜ascal,c4.堆——開銷比棧大(分配和釋放方式):Pascal,c12/22/202221編譯原理目標代碼靜態(tài)數(shù)據(jù)棧堆1.編譯后知道目標代碼的大小?!湃牖顒佑涗洶堰^程的一個活動所需要的信息組織成一塊連續(xù)的存儲單元,稱為活動記錄。一個活動所需要的信息的每個數(shù)據(jù)項有相同的生存期,因此,組織成一個活動記錄是很自然的。對于pascal語言來說,運行過程中,當調用一個過程時,在棧頂構筑它的活動記錄;當這個過程的活動執(zhí)行完后,把它從棧頂彈出。12/22/202222編譯原理活動記錄把過程的一個活動所需要的信息組織成一塊連續(xù)的存儲單元活動記錄控制鏈:指向調用過程活動的活動記錄。訪問鏈:指向本活動要訪問的非局部數(shù)據(jù)所在的活動記錄。保存機器狀態(tài):調用過程活動在調用點的機器狀態(tài),包括計數(shù)器,各種寄存器的值。局部數(shù)據(jù):過程中定義的局部量。臨時變量:編譯產(chǎn)生。返回值實在參數(shù)控制鏈訪問鏈保存機器狀態(tài)局部數(shù)據(jù)臨時變量12/22/202223編譯原理活動記錄控制鏈:指向調用過程活動的活動記錄。返回值實在參數(shù)控編譯時刻的局部數(shù)據(jù)的設計PROCEDUREsub(x,y:real);VARi,j:integer;a:ARRAY[1..5]OFreal;e,f:real;BEGIN …… f:=e+i*j;……END;名字形類型偏移量x形real1y形real2iint20jint21aarray22ereal27freal28符號表12/22/202224編譯原理編譯時刻的局部數(shù)據(jù)的設計PROCEDUREsub(x,y:中間代碼編譯結束,知道每個過程的活動記錄的長度,將其填寫到相應的過程表中,運行時,調用哪個過程,就在運行棧頂,推進那個過程的活動記錄(棧箭頭加上活動記錄長度)。f:=e+i*j;* i j t1+ e t1 t2:= t2 – f12/22/202225編譯原理中間代碼編譯結束,知道每個過程的活動記錄的長度,將其填寫到相運行時刻存儲分配策略分配策略是:靜態(tài)分配;棧式分配,或稱棧式動態(tài)分配;堆式分配,或稱堆式動態(tài)分配。采用哪種分配策略是由源語言的語義決定的。12/22/202226編譯原理運行時刻存儲分配策略分配策略是:12/19/202226編譯靜態(tài)存儲分配靜態(tài)存儲分配:在編譯階段由編譯程序實現(xiàn)對存儲空間的管理和為源程序中的變量分配存儲的方法。靜態(tài)存儲分配的條件如果在編譯時能夠確定源程序中變量在運行時的數(shù)據(jù)空間大小,且運行時不改變,那么就可以采用靜態(tài)存儲分配方法。允許局部名字的值在過程停止活動后仍然保持,也就是當控制再次進入程序時,局部名字的值同控制上次離開時一樣。還能用控制棧進行控制嗎?12/22/202227編譯原理靜態(tài)存儲分配靜態(tài)存儲分配:在編譯階段由編譯程序實現(xiàn)對存儲空間靜態(tài)存儲分配的局限在編譯時刻知道數(shù)據(jù)目標的大小和它們在內存位置上的約束;不能遞歸調用過程(一個過程的兩個活動的生存期不相交,一個過程的所有活動可以使用同一個活動記錄);不能動態(tài)地建立數(shù)據(jù)結構。12/22/202228編譯原理靜態(tài)存儲分配的局限在編譯時刻知道數(shù)據(jù)目標的大小和它們在內存位靜態(tài)存儲分配策略CNSUME目標代碼PRDUCE目標代碼Char*50bufintnextcharcChar*80bufferintnextCnsume活動記錄prduce活動記錄目標代碼靜態(tài)數(shù)據(jù)12/22/202229編譯原理靜態(tài)存儲分配策略CNSUMEPRDUCECnsumeprdu靜態(tài)存儲分配策略由于每個變量所需空間的大小在編譯時已知,因此可以用簡單的方法給變量分配目標地址。開辟一數(shù)據(jù)區(qū)。(首地址在加載時定)按編譯順序給每個模塊分配存儲空間。在模塊內部按順序給模塊的變量分配存儲,一般用相對地址,所占數(shù)據(jù)區(qū)的大小由變量類型決定。目標地址填入變量的符號表中。12/22/202230編譯原理靜態(tài)存儲分配策略由于每個變量所需空間的大小在編譯時已知,因此12/22/202231編譯原理12/19/202231編譯原理動態(tài)存儲分配在目標程序運行階段由目標程序實現(xiàn)對存儲空間的組織與管理,和為源程序中的變量分配存儲的方法。特點編譯時不能具體確定程序所需數(shù)據(jù)空間編譯程序生成有關存儲分配的目標代碼實際上的分配要在目標程序運行時進行分程序結構,且允許遞歸調用的語言:棧式動態(tài)存儲分配12/22/202232編譯原理動態(tài)存儲分配在目標程序運行階段由目標程序實現(xiàn)對存儲空間的組織棧式存儲分配策略基于控制棧的原理:

存儲空間被組織成棧,活動記錄的推入和彈出分別對應于活動的開始和結束。與靜態(tài)分配不同的是,在每次活動中把局部名字和新的存儲單元綁定,在活動結束時,活動記錄從棧中彈出,因而局部名字的存儲空間也隨之消失。分配策略:整個數(shù)據(jù)區(qū)為一個堆棧,當進入一個過程時,在棧頂為其分配一個數(shù)據(jù)區(qū)。退出時,撤消過程數(shù)據(jù)區(qū)。12/22/202233編譯原理棧式存儲分配策略基于控制棧的原理:

存儲空間被組織成棧,活動12/22/202234編譯原理12/19/202234編譯原理12/22/202235編譯原理12/19/202235編譯原理

Thanksforyourtime!Questions&Answers12/22/202236編譯原理12/19/202236編譯原理運行時的存儲組織及管理12/22/20222004年12月28日37運行時的存儲組織及管理12/19/20222004年12月2編譯器的應用模型出錯處理語法分析程序語義分析程序目標代碼生成程序詞法分析程序中間代碼生成程序代碼優(yōu)化程序表格管理編譯的前端(FrontEnd)編譯的后端(BackEnd)12/22/202238編譯原理編譯器的應用模型出語法分析程序語義分析程序目標代碼生成程序詞運行時的存儲組織及管理概述存儲組織運行時的存儲分配策略靜態(tài)存儲分配動態(tài)存儲分配對非局部名字的訪問參數(shù)傳遞12/22/202239編譯原理運行時的存儲組織及管理概述12/19/20223編譯原理運行時的存儲組織及管理 計算環(huán)境運行時的環(huán)境計算目標代碼當詞法分析掃描得到標識符,并將它填入符號表的過程中需要給識別出來的標識符分配內存空間。源程序由一組過程按某種規(guī)則組成。過程的一次執(zhí)行稱作一次活動。在過程的語句序列執(zhí)行之前,過程中訪問的對象構成此過程的運行環(huán)境,由運行支持程序組織好。編譯程序根據(jù)如何組織運行環(huán)境而生成目標代碼。映射源程序12/22/202240編譯原理運行時的存儲組織及管理 計算環(huán)境運行時環(huán)境的作用目標程序運行時所需存儲空間的組織與管理以及源程序中變量存儲空間的分配。12/22/202241編譯原理運行時環(huán)境的作用目標程序運行時所需存儲空間的組織與管理以及源有關源程序中的一些問題問題的提出:如何構造運行程序的策略和方法過程活動樹控制棧說明的作用域名字的綁定構造運行程序和源程序有關的一些問題12/22/202242編譯原理有關源程序中的一些問題問題的提出:如何構造運行程序的策略和方過程源程序由一組過程組成,不同的程序設計語言,由過程構成源程序的方法不同。構成源程序的兩個過程行文,要么是嵌套的,要么是不相交的。12/22/202243編譯原理過程源程序由一組過程組成,不同的程序設計語言,由過程構成源程programsort(input,output); vara:array[0..10]ofinteger; procedurereadarry; vari:integer; begin fori:=1to9doread(a[i]) end; functionpartition(y,z:integer):integer; vari,j,x,v:integer; begin…… end; procedurequicksort(m,n:integer) vari:integer; begin if(n>m)thenbegin i:=partition(m,n);

quicksort(m,i-1);

quicksort(i+1,n) end end begin a[0]:=-9999;a[10]:=9999;

readarray; quicksort(1,9) end12/22/202244編譯原理programsort(input,output);12活動樹程序執(zhí)行期間的控制流:程序執(zhí)行的控制是連續(xù)的:在任何一步,控制都處于程序的某一點過程的每一次執(zhí)行都是從過程體的開頭開始,并最終把控制返回到緊接著該過程被調用點的后面。過程的一次活動:過程體的每一次執(zhí)行。過程p的一次活動的生存期:在該過程體的執(zhí)行中的第一步和最后一步之間的一序列步驟的執(zhí)行時間,其中包括執(zhí)行過程p所調用的過程的執(zhí)行時間,以及這些過程所調用的過程的執(zhí)行時間,如此等等。一個過程是遞歸的,如果同一過程的一次新的活動可以在前面活動結束以前開始。12/22/202245編譯原理活動樹程序執(zhí)行期間的控制流:12/19/20229編譯原理活動樹為什么過程的活動可以用樹形結構描述?過程活動的特點:每當控制流從過程p的活動進入到過程q的活動中后,它將返回到過程p的同一次活動中。也就是說,如果a和b是兩個過程活動,那么它們的生存期要么是不重疊的,要么是嵌套的。在樹形結構中,節(jié)點間的關系就反映了過程之間的關系:父子關系:嵌套兄弟關系:先后12/22/202246編譯原理活動樹為什么過程的活動可以用樹形結構描述?12/19/202活動樹用一顆樹來描繪控制進入和離開活動的途徑。這祥的樹稱作活動樹。每個節(jié)點代表過程的一個活動根節(jié)點代表主程序的活動當且僅當控制流從活動a進入活動b時,節(jié)點a是b的父節(jié)點當且僅當a的生存期先于b的生存期時,a節(jié)點處于b結點的左邊一個結點代表一個唯一的活動,且每一個活動只有一個結點表示,當控制進入某一個活動時,可以直接說,控制在這個結點上。12/22/202247編譯原理活動樹用一顆樹來描繪控制進入和離開活動的途徑。這祥的樹稱作活programsort(input,output); vara:array[0..10]ofinteger; procedurereadarry; vari:integer; begin fori:=1to9doread(a[i]) end; functionpartition(y,z:integer):integer; vari,j,x,v:integer; begin…… end; procedurequicksort(m,n:integer) vari:integer; begin if(n>m)thenbegin i:=partition(m,n);

quicksort(m,i-1);

quicksort(i+1,n) end end begin a[0]:=-9999;a[10]:=9999;

readarray; quicksort(1,9) endsrq(1,9)p(1,9)q(1,3)p(1,3)q(1,0)q(2,3)p(2,3)q(2,1)q(3,3)q(5,9)12/22/202248編譯原理programsort(input,output);sr控制棧程序的控制流對應于從活動樹根節(jié)點開始的深度優(yōu)先遍歷。(從左至右)活動樹表示了完整的程序控制的先后順序。在真正運行過程中,活動樹并不是真實存在的數(shù)據(jù)結構。在程序運行過程中,我們只需要保存那些活躍著的過程?!刂茥?刂茥5幕舅枷耄寒斠粋€活動開始執(zhí)行時,把代表這個活動的結點推進棧;當這個活動結束時,把代表這個活動的結點從棧中彈出??刂茥V荒鼙硎净顒訕涞囊徊糠只顒訕渲皇沁壿嬌洗嬖诘摹愃朴谡Z法分析樹12/22/202249編譯原理控制棧程序的控制流對應于從活動樹根節(jié)點開始的深度優(yōu)先遍歷。(棧和活動樹的變化ssrSrq(1,9)Sq(1.9)p(1,9)Sq(1.9)p(1,9)q(1,3)Sq(1.9)q(1,3)p(1,3)Sq(1.9)q(1,3)p(1,3)q(1,0)Sq(1.9)q(1,3)q(1,0)q(2,3)Sq(1.9)q(1,3)q(2,3)12/22/202250編譯原理棧和活動樹的變化ssrSrq(1,9)Sq(1.9)p控制??刂茥V械幕顒佣际腔钴S的,當前控制進入的活動在棧頂,從棧頂活動到棧底活動的活動序列是從活動樹上當前結點通向根的路徑上的結點序列。從棧底活動到棧頂活動的活動序列表示了活動的生存期的嵌套關系。結論:擴充控制??捎脕韺崿F(xiàn)如Pascal語言的棧式存儲分配。(控制棧中存儲活動記錄)12/22/202251編譯原理控制??刂茥V械幕顒佣际腔钴S的,當前控制進入的活動在棧頂,從聲明的作用域聲明語句是把名字與名字的屬性信息綁定在一起的語法結構。說明的作用域是一個說明起作用的范圍——(源程序行文)。一個名字在源程序行文中可能有幾處說明,語言的作用域規(guī)則規(guī)定了在語句序列中引用的一個名字是在何處說明的名字。編譯時,處理說明時,把名字及其屬性信息填寫進符號表;處理引用時,查找這個名字的屬性信息,符號表管理程序根據(jù)語言的作用域規(guī)則,返回其作用域中綁定的屬性信息。12/22/202252編譯原理聲明的作用域聲明語句是把名字與名字的屬性信息綁定在一起的語法名字與存儲的綁定名字與存儲單元的綁定是指把源程序中的數(shù)據(jù)名字映射到目標機存儲單元的過程。環(huán)境把名字映射到一個存儲單元上;狀態(tài)把存儲單元映射到那里所存放的值上?;蛘哒f,環(huán)境把一個名字映射為一個左值,而狀態(tài)把一個左值映射為一個右值。12/22/202253編譯原理名字與存儲的綁定名字與存儲單元的綁定是指把源程序中的數(shù)據(jù)名字名字與存儲的綁定名字存儲單元值存儲分配程序運行環(huán)境狀態(tài)l-valuer-value12/22/202254編譯原理名字與存儲的綁定名字存儲單元值存儲分配程序運行環(huán)境狀態(tài)l-v靜態(tài)概念動態(tài)對應過程定義過程活動名字說明名字的綁定說明的作用域活動的生存期12/22/202255編譯原理靜態(tài)概念動態(tài)對應12存儲組織運行時刻內存的劃分:假定編譯器從操作系統(tǒng)得到一塊存儲區(qū),運行時的存儲空間要劃分成塊:生成的目標代碼;數(shù)據(jù)對象;記錄過程活動的控制棧對應的數(shù)據(jù)結構12/22/202256編譯原理存儲組織運行時刻內存的劃分:假定編譯器從操作系統(tǒng)得到一塊存儲目標代碼靜態(tài)數(shù)據(jù)棧堆1.編譯后知道目標代碼的大小?!湃腱o態(tài)確定的區(qū)域中2.某些數(shù)據(jù)對象的長度也可以在編譯時知道,也可以放在靜態(tài)區(qū)域中。主程序中的數(shù)據(jù):c,FORTRAN3.?!刂茥#篜ascal,c4.堆——開銷比棧大(分配和釋放方式):Pascal,c12/22/202257編譯原理目標代碼靜態(tài)數(shù)據(jù)棧堆1.編譯后知道目標代碼的大小?!湃牖顒佑涗洶堰^程的一個活動所需要的信息組織成一塊連續(xù)的存儲單元,稱為活動記錄。一個活動所需要的信息的每個數(shù)據(jù)項有相同的生存期,因此,組織成一個活動記錄是很自然的。對于pascal語言來說,運行過程中,當調用一個過程時,在棧頂構筑它的活動記錄;當這個過程的活動執(zhí)行完后,把它從棧頂彈出。12/22/202258編譯原理活動記錄把過程的一個活動所需要的信息組織成一塊連續(xù)的存儲單元活動記錄控制鏈:指向調用過程活動的活動記錄。訪問鏈:指向本活動要訪問的非局部數(shù)據(jù)所在的活動記錄。保存機器狀態(tài):調用過程活動在調用點的機器狀態(tài),包括計數(shù)器,各種寄存器的值。局部數(shù)據(jù):過程中定義的局部量。臨時變量:編譯產(chǎn)生。返回值實在參數(shù)控制鏈訪問鏈保存機器狀態(tài)局部數(shù)據(jù)臨時變量12/22/202259編譯原理活動記錄控制鏈:指向調用過程活動的活動記錄。返回值實在參數(shù)控編譯時刻的局部數(shù)據(jù)的設計PROCEDUREsub(x,y:real);VARi,j:integer;a:ARRAY[1..5]OFreal;e,f:real;BEGIN …… f:=e+i*j;……END;名字形類型偏移量x形real1y形real2iint20jint21aarray22ereal27freal28符號表12/22/202260編譯原理編譯時刻的局部數(shù)據(jù)的設計PROCEDUREsub(x,y:中間代碼編譯結束,知道每個過程的活動記錄的長度,將其填寫到相應的過程表中,運行時,調用哪個過程,就在運行棧頂,推進那個過程的活動記錄(棧箭頭加上活動記錄長度)。f:=e+i*j;* i j t1+ e t1 t2:= t2 – f12/22/202261編譯原理中間代碼編譯結束,知道每個過程的活動記錄的長度,將其填寫到相運行時刻存儲分配策略分配策略是:靜態(tài)分配;棧式分配,或稱棧式動態(tài)分配;堆式分配,或稱堆式動態(tài)分配。采用哪種分配策略是由源語言的語義決定的。12/2

溫馨提示

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

評論

0/150

提交評論