




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院1第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境( (存儲(chǔ)空間存儲(chǔ)空間) )o 當(dāng)源程序的目標(biāo)代碼被運(yùn)行時(shí),在內(nèi)存中不當(dāng)源程序的目標(biāo)代碼被運(yùn)行時(shí),在內(nèi)存中不僅有目標(biāo)代碼,而且還要保存各種信息僅有目標(biāo)代碼,而且還要保存各種信息n 例如為源程序中出現(xiàn)的一些量(常量、變量及例如為源程序中出現(xiàn)的一些量(常量、變量及某些數(shù)組等)分配運(yùn)行時(shí)的存儲(chǔ)空間。某些數(shù)組等)分配運(yùn)行時(shí)的存儲(chǔ)空間。o 目標(biāo)代碼要從操作系統(tǒng)得到一塊存儲(chǔ)區(qū),用目標(biāo)代碼要從操作系統(tǒng)得到一塊存儲(chǔ)區(qū),用于它的運(yùn)行。于它的運(yùn)行。第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machun
2、yan西北工業(yè)大學(xué)軟件與微電子學(xué)院2o 存儲(chǔ)分配是在運(yùn)行階段進(jìn)行的,但存儲(chǔ)分配是在運(yùn)行階段進(jìn)行的,但編譯程序在編譯程序在編譯階段要為其設(shè)計(jì)好存儲(chǔ)組織形式,并將這編譯階段要為其設(shè)計(jì)好存儲(chǔ)組織形式,并將這種組織形式通過(guò)生成的目標(biāo)代碼體現(xiàn)出來(lái)。種組織形式通過(guò)生成的目標(biāo)代碼體現(xiàn)出來(lái)。( (舉例說(shuō)明:舉例說(shuō)明:函數(shù)調(diào)用分析函數(shù)調(diào)用分析. .txttxt) )o 目標(biāo)代碼運(yùn)行時(shí),目標(biāo)代碼運(yùn)行時(shí),存儲(chǔ)空間的組織存儲(chǔ)空間的組織稱(chēng)為目標(biāo)代稱(chēng)為目標(biāo)代碼的碼的運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境。第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境( (存儲(chǔ)空間存儲(chǔ)空間)( )(續(xù)續(xù)) )第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北
3、工業(yè)大學(xué)軟件與微電子學(xué)院3o 運(yùn)行時(shí)環(huán)境有三個(gè)類(lèi)型:完全靜態(tài)環(huán)境運(yùn)行時(shí)環(huán)境有三個(gè)類(lèi)型:完全靜態(tài)環(huán)境(fully static environment)、基于棧的環(huán)境、基于棧的環(huán)境(stack-based environment),以及完全動(dòng)態(tài)環(huán)境以及完全動(dòng)態(tài)環(huán)境(fully dynamic environment)。這這3種類(lèi)型的混合形式種類(lèi)型的混合形式也是可能的。也是可能的。第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境( (存儲(chǔ)空間存儲(chǔ)空間)( )(續(xù)續(xù)) )第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院4 7.1 7.1 程序執(zhí)行時(shí)的存儲(chǔ)器組織程序執(zhí)行時(shí)的存儲(chǔ)器
4、組織7.3 7.3 基于棧的運(yùn)行時(shí)環(huán)境基于棧的運(yùn)行時(shí)環(huán)境7.4 7.4 動(dòng)態(tài)存儲(chǔ)器動(dòng)態(tài)存儲(chǔ)器7.5 7.5 參數(shù)存儲(chǔ)機(jī)制參數(shù)存儲(chǔ)機(jī)制7.7.2 2 完全靜態(tài)的運(yùn)行時(shí)環(huán)境完全靜態(tài)的運(yùn)行時(shí)環(huán)境第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境( (存儲(chǔ)空間存儲(chǔ)空間) )第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院57.17.1程序執(zhí)行時(shí)的存儲(chǔ)器組織程序執(zhí)行時(shí)的存儲(chǔ)器組織目標(biāo)代碼運(yùn)行時(shí)目標(biāo)代碼運(yùn)行時(shí), ,操作系統(tǒng)為目標(biāo)代碼的運(yùn)行分配操作系統(tǒng)為目標(biāo)代碼的運(yùn)行分配的存儲(chǔ)空間按用途可劃分為下面幾個(gè)部分的存儲(chǔ)空間按用途可劃分為下面幾個(gè)部分: :由于棧區(qū)和堆區(qū)的長(zhǎng)由于棧區(qū)和堆區(qū)的長(zhǎng)度會(huì)
5、隨著目標(biāo)代碼的度會(huì)隨著目標(biāo)代碼的運(yùn)行而變化,因此把運(yùn)行而變化,因此把它們分配在數(shù)據(jù)區(qū)的它們分配在數(shù)據(jù)區(qū)的兩端。一般情況下,兩端。一般情況下,棧向下長(zhǎng),堆向上長(zhǎng),棧向下長(zhǎng),堆向上長(zhǎng),可以使棧和堆共用一可以使棧和堆共用一空白存儲(chǔ)空間??瞻状鎯?chǔ)空間。第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院67.17.1程序執(zhí)行時(shí)的存儲(chǔ)器組織(續(xù))程序執(zhí)行時(shí)的存儲(chǔ)器組織(續(xù))o 代碼區(qū)域:目標(biāo)代碼的存儲(chǔ)區(qū)域,由于代碼區(qū)在執(zhí)行之代碼區(qū)域:目標(biāo)代碼的存儲(chǔ)區(qū)域,由于代碼區(qū)在執(zhí)行之前是固定的,在編譯時(shí)所有目標(biāo)代碼的地址都是可計(jì)算前是固定的,在編譯時(shí)所有目標(biāo)代碼的地址都是可計(jì)算的,程序
6、執(zhí)行結(jié)束后代碼區(qū)域內(nèi)存由系統(tǒng)釋放。的,程序執(zhí)行結(jié)束后代碼區(qū)域內(nèi)存由系統(tǒng)釋放。 o 全程全程/ /靜態(tài)區(qū)域:靜態(tài)數(shù)據(jù)區(qū)用來(lái)存放那些具有絕對(duì)地靜態(tài)區(qū)域:靜態(tài)數(shù)據(jù)區(qū)用來(lái)存放那些具有絕對(duì)地址的數(shù)據(jù)和變量址的數(shù)據(jù)和變量( (如靜態(tài)變量和全程變量如靜態(tài)變量和全程變量) );編譯器可以編譯器可以確定其所占用存儲(chǔ)空間的大小,初始化的全局變量和靜確定其所占用存儲(chǔ)空間的大小,初始化的全局變量和靜態(tài)變量在一塊區(qū)域,未初始化的全局變量和未初始化的態(tài)變量在一塊區(qū)域,未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域,程序執(zhí)行結(jié)束后由系統(tǒng)靜態(tài)變量在相鄰的另一塊區(qū)域,程序執(zhí)行結(jié)束后由系統(tǒng)釋放。釋放。o 本章案例分析本
7、章案例分析.doc.doc第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境7.17.1程序執(zhí)行時(shí)的存儲(chǔ)器組織(續(xù))程序執(zhí)行時(shí)的存儲(chǔ)器組織(續(xù))o 棧區(qū):棧區(qū):函數(shù)中的形參和在函數(shù)中定義的局部變量以及局部臨時(shí)變量(C、C+、Java),這些變量分配在棧區(qū),分配在棧區(qū),每次函數(shù)執(zhí)行的時(shí)候會(huì)在棧中為函數(shù)的執(zhí)行分配相應(yīng)的存儲(chǔ)區(qū),而在函數(shù)執(zhí)行完畢后,釋放相應(yīng)的存儲(chǔ)區(qū)。n編譯器編譯器“知道知道”存在棧中的具體數(shù)據(jù)所占內(nèi)存大小和內(nèi)存分配存在棧中的具體數(shù)據(jù)所占內(nèi)存大小和內(nèi)存分配和釋放的和釋放的“時(shí)刻時(shí)刻”;machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院7第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境o 堆區(qū):供用戶(hù)動(dòng)態(tài)申請(qǐng)存儲(chǔ)空間
8、,編譯器堆區(qū):供用戶(hù)動(dòng)態(tài)申請(qǐng)存儲(chǔ)空間,編譯器“不需要不需要”知知道究竟得從道究竟得從heapheap中分配多少空間,也不需要知道從中分配多少空間,也不需要知道從heapheap上分配的空間究竟需要存在多久。上分配的空間究竟需要存在多久。n 在c中由malloc,free運(yùn)算產(chǎn)生釋放的存儲(chǔ)空間,在c+中 由new和delete運(yùn)算符作用的存儲(chǔ)空間,以及在Java中由new分配的存儲(chǔ)空間都在堆中進(jìn)行分配。machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院87.17.1程序執(zhí)行時(shí)的存儲(chǔ)器組織(續(xù))程序執(zhí)行時(shí)的存儲(chǔ)器組織(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)
9、院9第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院10第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院117.17.1程序執(zhí)行時(shí)的存儲(chǔ)器組織(續(xù))程序執(zhí)行時(shí)的存儲(chǔ)器組織(續(xù))o 在在 語(yǔ)言中語(yǔ)言中, , 采用以函數(shù)(或過(guò)程)為單位的動(dòng)態(tài)存采用以函數(shù)(或過(guò)程)為單位的動(dòng)態(tài)存儲(chǔ)分配方案:儲(chǔ)分配方案:n當(dāng)一函數(shù)被調(diào)用時(shí),就在棧頂為該函數(shù)分配所需的數(shù)據(jù)空當(dāng)一函數(shù)被調(diào)用時(shí),就在棧頂為該函數(shù)分配所需的數(shù)據(jù)空間間( (過(guò)程活動(dòng)記錄過(guò)程活動(dòng)記錄) ),當(dāng)一個(gè)函數(shù)工作完畢返回時(shí),它在棧,當(dāng)一個(gè)函數(shù)工作完畢返回時(shí),它在棧頂?shù)臄?shù)據(jù)空間頂?shù)臄?shù)據(jù)空間
10、( (過(guò)程活動(dòng)記錄過(guò)程活動(dòng)記錄) )也即釋放。也即釋放。第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境o 活動(dòng)記錄存放的信息至少應(yīng)包括以下幾個(gè)部分:活動(dòng)記錄存放的信息至少應(yīng)包括以下幾個(gè)部分:machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院12存放主調(diào)函數(shù)為被調(diào)函數(shù)存放主調(diào)函數(shù)為被調(diào)函數(shù)提供的實(shí)參信息提供的實(shí)參信息;存放目標(biāo)程序臨時(shí)變存放目標(biāo)程序臨時(shí)變量的值量的值;存放本次執(zhí)行中的局部數(shù)據(jù)存放本次執(zhí)行中的局部數(shù)據(jù)用于指向主調(diào)函數(shù)的用于指向主調(diào)函數(shù)的活動(dòng)記活動(dòng)記錄的控制鏈錄的控制鏈和返回地址和返回地址;7.17.1程序執(zhí)行時(shí)的存儲(chǔ)器組織(續(xù))程序執(zhí)行時(shí)的存儲(chǔ)器組織(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境ma
11、chunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院137.17.1程序執(zhí)行時(shí)的存儲(chǔ)器組織(續(xù))程序執(zhí)行時(shí)的存儲(chǔ)器組織(續(xù))實(shí)參實(shí)參返回地址返回地址控制鏈控制鏈臨時(shí)變量和局部數(shù)據(jù)臨時(shí)變量和局部數(shù)據(jù)實(shí)參實(shí)參返回地址返回地址控制鏈控制鏈臨時(shí)變量和局部數(shù)據(jù)臨時(shí)變量和局部數(shù)據(jù)調(diào)用者調(diào)用者的活動(dòng)的活動(dòng)記錄記錄被調(diào)用被調(diào)用者的活者的活動(dòng)記錄動(dòng)記錄調(diào)調(diào)用用者者的的職職責(zé)責(zé)第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境語(yǔ)言所調(diào)用函數(shù)語(yǔ)言所調(diào)用函數(shù)的活動(dòng)記錄示例的活動(dòng)記錄示例( (函數(shù)調(diào)用分析中函數(shù)調(diào)用分析中的舉例的舉例) )o 控制鏈:指向調(diào)用函數(shù)活動(dòng)記錄的一個(gè)地址。machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院14b:2a:1
12、該函數(shù)調(diào)用結(jié)束該函數(shù)調(diào)用結(jié)束時(shí)的返回地址時(shí)的返回地址(00401014)主調(diào)函數(shù)的控主調(diào)函數(shù)的控制鏈制鏈c:3棧底棧底棧頂棧頂7.17.1程序執(zhí)行時(shí)的存儲(chǔ)器組織(續(xù))程序執(zhí)行時(shí)的存儲(chǔ)器組織(續(xù))當(dāng)前函數(shù)的當(dāng)前函數(shù)的控制鏈控制鏈第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院157.1 7.1 程序執(zhí)行時(shí)的存儲(chǔ)器組織程序執(zhí)行時(shí)的存儲(chǔ)器組織7.2 7.2 完全靜態(tài)的運(yùn)行時(shí)環(huán)境完全靜態(tài)的運(yùn)行時(shí)環(huán)境7.3 7.3 基于棧的運(yùn)行時(shí)環(huán)境7.4 7.4 動(dòng)態(tài)存儲(chǔ)器動(dòng)態(tài)存儲(chǔ)器7.5 7.5 參數(shù)存儲(chǔ)機(jī)制參數(shù)存儲(chǔ)機(jī)制第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境( (存儲(chǔ)空間存儲(chǔ)空間)
13、)第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院167.2 7.2 完全靜態(tài)的運(yùn)行時(shí)環(huán)境完全靜態(tài)的運(yùn)行時(shí)環(huán)境o 在完全靜態(tài)環(huán)境中,不僅全局變量,所有的變量都是在完全靜態(tài)環(huán)境中,不僅全局變量,所有的變量都是靜態(tài)分配,即整個(gè)程序所需數(shù)據(jù)空間的總量在編譯時(shí)靜態(tài)分配,即整個(gè)程序所需數(shù)據(jù)空間的總量在編譯時(shí)是完全確定的,從而每個(gè)數(shù)據(jù)名的地址就可靜態(tài)地進(jìn)是完全確定的,從而每個(gè)數(shù)據(jù)名的地址就可靜態(tài)地進(jìn)行分配,適于靜態(tài)分配的語(yǔ)言,要求滿(mǎn)足的條件是:行分配,適于靜態(tài)分配的語(yǔ)言,要求滿(mǎn)足的條件是:n每個(gè)數(shù)據(jù)名所需的存儲(chǔ)空間的大小都是常量每個(gè)數(shù)據(jù)名所需的存儲(chǔ)空間的大小都是常量n不允
14、許采用動(dòng)態(tài)的數(shù)據(jù)結(jié)構(gòu),即在程序運(yùn)行過(guò)程中申請(qǐng)或釋不允許采用動(dòng)態(tài)的數(shù)據(jù)結(jié)構(gòu),即在程序運(yùn)行過(guò)程中申請(qǐng)或釋放的數(shù)據(jù)結(jié)構(gòu)放的數(shù)據(jù)結(jié)構(gòu)n過(guò)程不可遞歸調(diào)用過(guò)程不可遞歸調(diào)用第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院17整個(gè)程序整個(gè)程序存儲(chǔ)器如存儲(chǔ)器如右所示:右所示:7.2 7.2 完全靜態(tài)的運(yùn)行時(shí)環(huán)境(續(xù))完全靜態(tài)的運(yùn)行時(shí)環(huán)境(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院187.1 7.1 程序執(zhí)行時(shí)的存儲(chǔ)器組織程序執(zhí)行時(shí)的存儲(chǔ)器組織7.2 7.2 完全靜態(tài)的運(yùn)行時(shí)環(huán)境完全靜態(tài)的運(yùn)行時(shí)環(huán)境7.3 7.3 基于棧的運(yùn)行時(shí)環(huán)境基于
15、棧的運(yùn)行時(shí)環(huán)境7.4 7.4 動(dòng)態(tài)存儲(chǔ)器動(dòng)態(tài)存儲(chǔ)器7.5 7.5 參數(shù)存儲(chǔ)機(jī)制參數(shù)存儲(chǔ)機(jī)制第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境( (存儲(chǔ)空間存儲(chǔ)空間) )第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院197.3 7.3 基于棧的運(yùn)行時(shí)環(huán)境基于棧的運(yùn)行時(shí)環(huán)境o 在一個(gè)在一個(gè)所有函數(shù)都是全局的所有函數(shù)都是全局的、函數(shù)、函數(shù)定義不允定義不允許嵌套許嵌套,但允許函數(shù)遞歸調(diào)用的程序設(shè)計(jì)語(yǔ),但允許函數(shù)遞歸調(diào)用的程序設(shè)計(jì)語(yǔ)言言( (例如例如C C語(yǔ)言語(yǔ)言) )中,基于棧的動(dòng)態(tài)運(yùn)行時(shí)環(huán)中,基于棧的動(dòng)態(tài)運(yùn)行時(shí)環(huán)境有兩個(gè)指針境有兩個(gè)指針:n sp:棧頂部棧頂部( (top of
16、 stack) )指針;對(duì)于指針;對(duì)于x86x86系統(tǒng)來(lái)系統(tǒng)來(lái)說(shuō),它采用說(shuō),它采用spsp或或espesp寄存器存儲(chǔ)棧頂部的地址;寄存器存儲(chǔ)棧頂部的地址;n 注:用它只可訪(fǎng)問(wèn)棧頂注:用它只可訪(fǎng)問(wèn)棧頂?shù)诘? 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院207.3 7.3 基于棧的運(yùn)行時(shí)環(huán)境(續(xù))基于棧的運(yùn)行時(shí)環(huán)境(續(xù))n fp(frame point):控制鏈指針,即存儲(chǔ)控制鏈指針,即存儲(chǔ)當(dāng)前活當(dāng)前活動(dòng)記錄的控制鏈(即一個(gè)地址)動(dòng)記錄的控制鏈(即一個(gè)地址),對(duì)于對(duì)于x86系系統(tǒng),它采用統(tǒng),它采用bp或或ebp寄存器寄存器存儲(chǔ)存儲(chǔ)當(dāng)前活動(dòng)記錄當(dāng)前活動(dòng)記錄的控制鏈,其作
17、用如下:的控制鏈,其作用如下:o 1.1.通過(guò)該指針可以訪(fǎng)問(wèn)主調(diào)函數(shù)的活動(dòng)記錄;即允通過(guò)該指針可以訪(fǎng)問(wèn)主調(diào)函數(shù)的活動(dòng)記錄;即允許在當(dāng)前的被調(diào)函數(shù)執(zhí)行完畢時(shí),用它來(lái)恢復(fù)主調(diào)許在當(dāng)前的被調(diào)函數(shù)執(zhí)行完畢時(shí),用它來(lái)恢復(fù)主調(diào)函數(shù)的活動(dòng)記錄。函數(shù)的活動(dòng)記錄。o 2.2.通過(guò)該指針可以訪(fǎng)問(wèn)當(dāng)前執(zhí)行函數(shù)的實(shí)參和局部通過(guò)該指針可以訪(fǎng)問(wèn)當(dāng)前執(zhí)行函數(shù)的實(shí)參和局部變量;變量;第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院21b:2a:1該函數(shù)調(diào)用結(jié)束該函數(shù)調(diào)用結(jié)束時(shí)的返回地址時(shí)的返回地址(cs:eip) 00401014主調(diào)函數(shù)的控主調(diào)函數(shù)的控制鏈制鏈(main.ebp)void
18、_stdcall void _stdcall f_stdcall(int f_stdcall(int a,int b)a,int b) int c;int c;c=a+b;c=a+b; c:3esp棧底棧底棧頂棧頂ebp7.3 7.3 基于棧的運(yùn)行時(shí)環(huán)境(續(xù))基于棧的運(yùn)行時(shí)環(huán)境(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院22當(dāng)一個(gè)函數(shù)被調(diào)用時(shí),當(dāng)一個(gè)函數(shù)被調(diào)用時(shí),在棧頂為該函數(shù)分配在棧頂為該函數(shù)分配所需的數(shù)據(jù)空間所需的數(shù)據(jù)空間( (過(guò)程活動(dòng)記錄過(guò)程活動(dòng)記錄) )如下:如下:將將實(shí)參實(shí)參的值壓入在該函數(shù)對(duì)應(yīng)的的值壓入在該函數(shù)對(duì)應(yīng)的新活動(dòng)記錄新活動(dòng)記錄中
19、。中。將被調(diào)函數(shù)執(zhí)行完畢后的將被調(diào)函數(shù)執(zhí)行完畢后的返回地址返回地址壓入在壓入在新的活動(dòng)記錄新的活動(dòng)記錄中。中。完成到被調(diào)用的過(guò)程代碼一個(gè)轉(zhuǎn)移。完成到被調(diào)用的過(guò)程代碼一個(gè)轉(zhuǎn)移。將主調(diào)函數(shù)的將主調(diào)函數(shù)的fpfp作為作為控制鏈壓入到新的活動(dòng)記錄控制鏈壓入到新的活動(dòng)記錄中。中。改變改變fpfp以使其以使其指向新的活動(dòng)記錄指向新的活動(dòng)記錄( (將將spsp復(fù)制到復(fù)制到fpfp中中) )將該函數(shù)的將該函數(shù)的局部變量局部變量和和局部臨時(shí)變量局部臨時(shí)變量壓入到新的活動(dòng)記錄中。壓入到新的活動(dòng)記錄中。7.3 7.3 基于棧的運(yùn)行時(shí)環(huán)境(續(xù))基于棧的運(yùn)行時(shí)環(huán)境(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machuny
20、an西北工業(yè)大學(xué)軟件與微電子學(xué)院23b:2a:1該函數(shù)調(diào)用結(jié)束該函數(shù)調(diào)用結(jié)束時(shí)的返回地址時(shí)的返回地址(cs:eip) 00401014主調(diào)函數(shù)的控主調(diào)函數(shù)的控制鏈制鏈(main.fp)語(yǔ)言當(dāng)前執(zhí)語(yǔ)言當(dāng)前執(zhí)行函數(shù)的活動(dòng)行函數(shù)的活動(dòng)記錄示例:記錄示例:c:3sp棧底棧底棧頂棧頂fp7.3 7.3 基于棧的運(yùn)行時(shí)環(huán)境(續(xù))基于棧的運(yùn)行時(shí)環(huán)境(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院24當(dāng)被調(diào)函數(shù)執(zhí)行完畢返回時(shí),其對(duì)應(yīng)當(dāng)被調(diào)函數(shù)執(zhí)行完畢返回時(shí),其對(duì)應(yīng)的活動(dòng)記錄從棧中彈出的過(guò)程:的活動(dòng)記錄從棧中彈出的過(guò)程: 將將fpfp復(fù)制到復(fù)制到spsp中。中。 將控制鏈
21、裝載到將控制鏈裝載到fpfp中。中。 完成到返回地址主調(diào)函數(shù)的一個(gè)轉(zhuǎn)移。完成到返回地址主調(diào)函數(shù)的一個(gè)轉(zhuǎn)移。 改變改變spsp以彈出實(shí)參。以彈出實(shí)參。7.3 7.3 基于棧的運(yùn)行時(shí)環(huán)境(續(xù))基于棧的運(yùn)行時(shí)環(huán)境(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院25例:計(jì)算兩個(gè)非負(fù)整數(shù)最大公約數(shù)的例:計(jì)算兩個(gè)非負(fù)整數(shù)最大公約數(shù)的c c代碼如下:代碼如下:#include int x,y;int gcd(int u,int v) if(v= =0) return u; else return gcd(v,u%v)main() scanf(“%d%d”,&x,&y)
22、; printf(“%dn”,gcd(x,y); return 0;7.3 7.3 基于棧的運(yùn)行時(shí)環(huán)境(續(xù))基于棧的運(yùn)行時(shí)環(huán)境(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院26x:15x:15y:10y:10全局全局/ /靜態(tài)區(qū)域靜態(tài)區(qū)域mainmain的活動(dòng)記錄的活動(dòng)記錄sp,fpsp,fpv:10v:10u:15u:15返回地址返回地址mainmain的的fpfp第一次調(diào)用第一次調(diào)用gcdgcd時(shí)的活動(dòng)記錄時(shí)的活動(dòng)記錄sp,fpsp,fp第二次調(diào)用第二次調(diào)用gcdgcd時(shí)的活動(dòng)記錄時(shí)的活動(dòng)記錄v:5v:5u:10u:10返回地址返回地址第一次調(diào)用第
23、一次調(diào)用gcdgcd時(shí)的時(shí)的fpfp第三次調(diào)用第三次調(diào)用gcdgcd時(shí)的活動(dòng)記錄時(shí)的活動(dòng)記錄v:0v:0u:5u:5返回地址返回地址第二次調(diào)用第二次調(diào)用gcdgcd時(shí)的時(shí)的fpfpsp,fpsp,fpsp,fpsp,fp棧生長(zhǎng)方向棧生長(zhǎng)方向自由空間自由空間7.3 7.3 基于棧的運(yùn)行時(shí)環(huán)境(續(xù))基于棧的運(yùn)行時(shí)環(huán)境(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院27例:考慮下列程序清單的例:考慮下列程序清單的c c代碼。代碼。int x=2;void g(int);void f(int n)static int x=1; g(n); x- -;void g
24、(int m)int y=m-1;if (y0) f(y); x- -; g(y); main()g(x); return 0;畫(huà)出至第二次對(duì)畫(huà)出至第二次對(duì)g調(diào)用時(shí),調(diào)用時(shí),程序的運(yùn)行時(shí)環(huán)境:程序的運(yùn)行時(shí)環(huán)境:7.3 7.3 基于棧的運(yùn)行時(shí)環(huán)境(續(xù))基于棧的運(yùn)行時(shí)環(huán)境(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院28x:2x:2x x(from ffrom f):1:1全局全局/ /靜態(tài)區(qū)域靜態(tài)區(qū)域mainmain的活動(dòng)記錄的活動(dòng)記錄sp,fpsp,fpm:2m:2返回地址返回地址mainmain的的fp fp y:1y:1第一次調(diào)用第一次調(diào)用g g時(shí)
25、時(shí)的活動(dòng)記錄的活動(dòng)記錄fpfpspsp第一次調(diào)用第一次調(diào)用f f時(shí)時(shí)的活動(dòng)記錄的活動(dòng)記錄n:1n:1 返回地址返回地址第一次調(diào)用第一次調(diào)用g g時(shí)的時(shí)的fpfpsp,fpsp,fp第二次調(diào)用第二次調(diào)用g g時(shí)的時(shí)的活動(dòng)記錄活動(dòng)記錄m:1m:1 返回地址返回地址第一次調(diào)用第一次調(diào)用f f時(shí)的時(shí)的fp fp y:0y:0fpfpspsp棧生長(zhǎng)方向棧生長(zhǎng)方向自由空間自由空間7.3 7.3 基于棧的運(yùn)行時(shí)環(huán)境(續(xù))基于棧的運(yùn)行時(shí)環(huán)境(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院29o 目標(biāo)代碼的生成必須目標(biāo)代碼的生成必須n 支持變量和臨時(shí)變量的實(shí)際定位,并增加
26、支持運(yùn)支持變量和臨時(shí)變量的實(shí)際定位,并增加支持運(yùn)行時(shí)環(huán)境所必需的代碼行時(shí)環(huán)境所必需的代碼。 對(duì)名字的訪(fǎng)問(wèn)對(duì)名字的訪(fǎng)問(wèn)o 局部臨時(shí)變量局部臨時(shí)變量o 嵌套聲明嵌套聲明o 如何處理可變長(zhǎng)度的問(wèn)題如何處理可變長(zhǎng)度的問(wèn)題7.3 7.3 基于棧的運(yùn)行時(shí)環(huán)境(續(xù))基于棧的運(yùn)行時(shí)環(huán)境(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院30對(duì)名字的訪(fǎng)問(wèn):對(duì)名字的訪(fǎng)問(wèn):o 在沒(méi)有局部過(guò)程的基于棧的運(yùn)行時(shí)環(huán)境中,所有的非在沒(méi)有局部過(guò)程的基于棧的運(yùn)行時(shí)環(huán)境中,所有的非局部的名字都是全局的局部的名字都是全局的,因此也就是靜態(tài)的,都具有,因此也就是靜態(tài)的,都具有一個(gè)固定的靜態(tài)地址,可
27、以被直接訪(fǎng)問(wèn)。一個(gè)固定的靜態(tài)地址,可以被直接訪(fǎng)問(wèn)。o 對(duì)函數(shù)參數(shù)和局部變量而言,在大多數(shù)的語(yǔ)言中,如對(duì)函數(shù)參數(shù)和局部變量而言,在大多數(shù)的語(yǔ)言中,如果函數(shù)的聲明在編譯時(shí)是固定的,而且為每個(gè)聲明分果函數(shù)的聲明在編譯時(shí)是固定的,而且為每個(gè)聲明分配的存儲(chǔ)器大小也根據(jù)其數(shù)據(jù)類(lèi)型而固定,配的存儲(chǔ)器大小也根據(jù)其數(shù)據(jù)類(lèi)型而固定,每個(gè)實(shí)參每個(gè)實(shí)參和局部聲明的偏移量可由編譯程序計(jì)算和局部聲明的偏移量可由編譯程序計(jì)算。第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院31m:2 m:2 返回地址返回地址控制鏈控制鏈 y:1y:1fpfpmOffsetmOffsetyOffsetyOf
28、fsetmOffset=+8mOffset=+8yOffset=-4yOffset=-4高端地址高端地址低端地址低端地址對(duì)名字的訪(fǎng)問(wèn):(續(xù))對(duì)名字的訪(fǎng)問(wèn):(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院32例:考慮下面的例:考慮下面的C C過(guò)程過(guò)程Viod f(int x,char c)Viod f(int x,char c)int a10;int a10; double y; double y; c cx x 返回地址返回地址控制鏈控制鏈a9a9a1a1a0a0y yfpfpcOffsetcOffsetaOffsetaOffsetxOffsetxOff
29、setyOffsetyOffsetxOffset=+8xOffset=+8cOffset=+12cOffset=+12aOffset=-40aOffset=-40yOffset=-48yOffset=-48現(xiàn)在對(duì)現(xiàn)在對(duì)aiai訪(fǎng)問(wèn),要求計(jì)算地址:訪(fǎng)問(wèn),要求計(jì)算地址:(-40+4(-40+4* *i)(fp)i)(fp)對(duì)名字的訪(fǎng)問(wèn):(續(xù))對(duì)名字的訪(fǎng)問(wèn):(續(xù))對(duì)對(duì)f調(diào)用的活動(dòng)記錄為:調(diào)用的活動(dòng)記錄為:第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院33o 目標(biāo)代碼的生成必須目標(biāo)代碼的生成必須n 支持變量和臨時(shí)變量的實(shí)際定位,并增加支持運(yùn)支持變量和臨時(shí)變量的實(shí)際定
30、位,并增加支持運(yùn)行時(shí)環(huán)境所必需的代碼行時(shí)環(huán)境所必需的代碼。o 對(duì)名字的訪(fǎng)問(wèn)對(duì)名字的訪(fǎng)問(wèn) 局部臨時(shí)變量局部臨時(shí)變量o 嵌套聲明嵌套聲明o 如何處理可變長(zhǎng)度的問(wèn)題如何處理可變長(zhǎng)度的問(wèn)題7.3 7.3 基于棧的運(yùn)行時(shí)環(huán)境(續(xù))基于棧的運(yùn)行時(shí)環(huán)境(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院34局部臨時(shí)變量:局部臨時(shí)變量:o 考慮考慮C表達(dá)式:表達(dá)式:xi=(i+j)*(i/k+f(j),在這個(gè),在這個(gè)表達(dá)式從左到右的求值計(jì)算中,在對(duì)表達(dá)式從左到右的求值計(jì)算中,在對(duì)f的調(diào)的調(diào)用過(guò)程中需要保存中間結(jié)果:用過(guò)程中需要保存中間結(jié)果: xi的地址、的地址、i+j的和、
31、的和、i/k的商。的商。n 這些中間值可計(jì)算到寄存器中,根據(jù)寄存器進(jìn)這些中間值可計(jì)算到寄存器中,根據(jù)寄存器進(jìn)行保存和恢復(fù);或者行保存和恢復(fù);或者可將它們作為臨時(shí)變量存可將它們作為臨時(shí)變量存儲(chǔ)在對(duì)儲(chǔ)在對(duì)f調(diào)用之前的運(yùn)行時(shí)棧中調(diào)用之前的運(yùn)行時(shí)棧中。如下所示:。如下所示:第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院35 返回地址返回地址控制鏈控制鏈xixi的地址的地址i+ji+j的結(jié)果的結(jié)果i/ji/j的結(jié)果的結(jié)果fpfp( (棧的其余部分棧的其余部分) )spsp臨時(shí)棧臨時(shí)棧調(diào)用調(diào)用f f(將要?jiǎng)?chuàng)建的)時(shí)的將要?jiǎng)?chuàng)建的)時(shí)的新活動(dòng)記錄新活動(dòng)記錄包含表達(dá)式過(guò)程的活
32、動(dòng)記錄包含表達(dá)式過(guò)程的活動(dòng)記錄自由空間自由空間局部臨時(shí)變量:(續(xù))局部臨時(shí)變量:(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院36o 目標(biāo)代碼的生成必須目標(biāo)代碼的生成必須n 支持變量和臨時(shí)變量的實(shí)際定位,并增加支持運(yùn)支持變量和臨時(shí)變量的實(shí)際定位,并增加支持運(yùn)行時(shí)環(huán)境所必需的代碼行時(shí)環(huán)境所必需的代碼。o 對(duì)名字的訪(fǎng)問(wèn)對(duì)名字的訪(fǎng)問(wèn)p 局部臨時(shí)變量局部臨時(shí)變量p 嵌套聲明嵌套聲明o 如何處理可變長(zhǎng)度的問(wèn)題如何處理可變長(zhǎng)度的問(wèn)題7.3 7.3 基于棧的運(yùn)行時(shí)環(huán)境(續(xù))基于棧的運(yùn)行時(shí)環(huán)境(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件
33、與微電子學(xué)院37嵌套聲明也出現(xiàn)了與局部臨時(shí)變量同樣的問(wèn)題??紤]以下的嵌套聲明也出現(xiàn)了與局部臨時(shí)變量同樣的問(wèn)題??紤]以下的C C代碼:代碼:Void p(int x,double y) char a; int i; A: double x; int j; B: char *a; int k; 嵌套聲明:嵌套聲明:第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院38x:x:y:y: 返回地址返回地址 控制鏈控制鏈a:a:i:i:x x: :j j: :fpfp( (棧的其余部分棧的其余部分) )spsp塊塊A A的分配區(qū)的分配區(qū)調(diào)用調(diào)用p p時(shí)的活動(dòng)記錄時(shí)的活動(dòng)記
34、錄自由空間自由空間嵌套聲明:(續(xù))嵌套聲明:(續(xù))o一個(gè)簡(jiǎn)單的處理辦法是按照與臨時(shí)表達(dá)式相類(lèi)似的辦法在嵌套一個(gè)簡(jiǎn)單的處理辦法是按照與臨時(shí)表達(dá)式相類(lèi)似的辦法在嵌套的塊中處理聲明,并在進(jìn)入塊時(shí)在棧中分配它們。當(dāng)進(jìn)入塊的塊中處理聲明,并在進(jìn)入塊時(shí)在棧中分配它們。當(dāng)進(jìn)入塊A后,運(yùn)行時(shí)棧如下所示:后,運(yùn)行時(shí)棧如下所示:第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院39x:x:y:y: 返回地址返回地址控制鏈控制鏈a:a:i:i:a a: :k k: :fpfp( (棧的其余部分棧的其余部分) )spsp塊塊B B的分配區(qū)的分配區(qū)調(diào)用調(diào)用p p時(shí)的活動(dòng)記錄時(shí)的活動(dòng)記錄自
35、由空間自由空間當(dāng)進(jìn)入塊當(dāng)進(jìn)入塊B B后,運(yùn)行時(shí)棧如下所示:后,運(yùn)行時(shí)棧如下所示:嵌套聲明:(續(xù))嵌套聲明:(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院40o 目標(biāo)代碼的生成必須目標(biāo)代碼的生成必須n 支持變量和臨時(shí)變量的實(shí)際定位,并增加支持運(yùn)支持變量和臨時(shí)變量的實(shí)際定位,并增加支持運(yùn)行時(shí)環(huán)境所必需的代碼行時(shí)環(huán)境所必需的代碼。o 對(duì)名字的訪(fǎng)問(wèn)對(duì)名字的訪(fǎng)問(wèn)p 局部臨時(shí)變量局部臨時(shí)變量p 嵌套聲明嵌套聲明 如何處理可變長(zhǎng)度的問(wèn)題如何處理可變長(zhǎng)度的問(wèn)題7.3 7.3 基于棧的運(yùn)行時(shí)環(huán)境(續(xù))基于棧的運(yùn)行時(shí)環(huán)境(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machu
36、nyan西北工業(yè)大學(xué)軟件與微電子學(xué)院41處理可變長(zhǎng)度的數(shù)據(jù)處理可變長(zhǎng)度的數(shù)據(jù)有時(shí)編譯程序必須處理數(shù)據(jù)變化的可能性,表現(xiàn)在數(shù)據(jù)對(duì)象的數(shù)量和每有時(shí)編譯程序必須處理數(shù)據(jù)變化的可能性,表現(xiàn)在數(shù)據(jù)對(duì)象的數(shù)量和每個(gè)對(duì)象的大小上。發(fā)生在支持基于棧的環(huán)境的語(yǔ)言中的一種情況如下:個(gè)對(duì)象的大小上。發(fā)生在支持基于棧的環(huán)境的語(yǔ)言中的一種情況如下: 調(diào)用中的自變量的數(shù)量可根據(jù)調(diào)用的不同而不同。調(diào)用中的自變量的數(shù)量可根據(jù)調(diào)用的不同而不同。printf(printf(“%d%s, n, prompt);%d%s, n, prompt);printf(printf(“%d %d %d %d %d %d ”,3,4,50);,
37、3,4,50);通常,通常,C C編譯程序一般通過(guò)把調(diào)用的自變量按相反順序編譯程序一般通過(guò)把調(diào)用的自變量按相反順序( (in reverse in reverse order)order)壓入到運(yùn)行時(shí)棧來(lái)處理這一點(diǎn)。壓入到運(yùn)行時(shí)棧來(lái)處理這一點(diǎn)。第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院42oprintf(“%d %d %d” ,3,4,50);n設(shè)置一指針設(shè)置一指針ap;n讓讓ap指向第一個(gè)可變參數(shù)指向第一個(gè)可變參數(shù)(地址為地址為ebp+控制鏈所占的空控制鏈所占的空間間+返回地址所占的空間返回地址所占的空間+固定參數(shù)所占的空間固定參數(shù)所占的空間),即,即
38、3所所在的空間;在的空間;n返回返回3,ap的值加的值加4即指向即指向4所在的存儲(chǔ)空間所在的存儲(chǔ)空間,通過(guò)指通過(guò)指針針ap的移動(dòng)讀取所有的可變參數(shù),根據(jù)固定參數(shù)的移動(dòng)讀取所有的可變參數(shù),根據(jù)固定參數(shù)“%d %d %d”,該字符串中每出現(xiàn)一個(gè),該字符串中每出現(xiàn)一個(gè)“%d”就執(zhí)行一次;就執(zhí)行一次;固定參數(shù)指出了后面的可固定參數(shù)指出了后面的可變參數(shù)的個(gè)數(shù);變參數(shù)的個(gè)數(shù); 清除變量清除變量ap。處理可變長(zhǎng)度的數(shù)據(jù)處理可變長(zhǎng)度的數(shù)據(jù)(續(xù)續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院437.1 7.1 程序執(zhí)行時(shí)的存儲(chǔ)器組織程序執(zhí)行時(shí)的存儲(chǔ)器組織7.2 7.2 完全
39、靜態(tài)的運(yùn)行時(shí)環(huán)境完全靜態(tài)的運(yùn)行時(shí)環(huán)境7.3 7.3 基于棧的運(yùn)行時(shí)環(huán)境基于棧的運(yùn)行時(shí)環(huán)境7.4 7.4 動(dòng)態(tài)存儲(chǔ)器動(dòng)態(tài)存儲(chǔ)器7.5 7.5 參數(shù)存儲(chǔ)機(jī)制參數(shù)存儲(chǔ)機(jī)制第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境( (存儲(chǔ)空間存儲(chǔ)空間) )第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院447.4.1對(duì)象類(lèi)型對(duì)象類(lèi)型在大多數(shù)面向?qū)ο蟮恼Z(yǔ)言中,對(duì)象都有構(gòu)造函數(shù)和在大多數(shù)面向?qū)ο蟮恼Z(yǔ)言中,對(duì)象都有構(gòu)造函數(shù)和析構(gòu)函數(shù),它們分別在創(chuàng)建對(duì)象和釋放對(duì)象時(shí)被調(diào)析構(gòu)函數(shù),它們分別在創(chuàng)建對(duì)象和釋放對(duì)象時(shí)被調(diào)用。假定我們有一對(duì)象類(lèi)用。假定我們有一對(duì)象類(lèi)A A,它有方法它有方法m1,m2m1,
40、m2以及字段以及字段a1a1和和a2a2。那么類(lèi)那么類(lèi)A A對(duì)象的運(yùn)行時(shí)表示有包含對(duì)象的運(yùn)行時(shí)表示有包含字段字段a1a1和和a2a2記錄組成:記錄組成:a1a1a2a2m1_Am1_Am2_Am2_A另外,編譯程序維護(hù)著一張類(lèi)另外,編譯程序維護(hù)著一張類(lèi)A A的編譯時(shí)方法表:的編譯時(shí)方法表:7.4 7.4 動(dòng)態(tài)存儲(chǔ)器動(dòng)態(tài)存儲(chǔ)器第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境o 在上述簡(jiǎn)單的模塊中,字段選擇可以像記錄字在上述簡(jiǎn)單的模塊中,字段選擇可以像記錄字段選擇一樣實(shí)現(xiàn),方法選擇由編譯程序內(nèi)的識(shí)段選擇一樣實(shí)現(xiàn),方法選擇由編譯程序內(nèi)的識(shí)別過(guò)程來(lái)實(shí)現(xiàn)。即通過(guò)一個(gè)指向?qū)ο蟮闹羔?,別過(guò)程來(lái)實(shí)現(xiàn)。即通過(guò)一個(gè)指向?qū)ο蟮?/p>
41、指針,方法可以像函數(shù)一樣實(shí)現(xiàn)。因此方法方法可以像函數(shù)一樣實(shí)現(xiàn)。因此方法m2_Am2_A可以可以翻譯為翻譯為c c語(yǔ)言中的函數(shù)。語(yǔ)言中的函數(shù)。n void m2_A(class_A *this, int i) 方法方法m2_A的程序體,通過(guò)的程序體,通過(guò)this-x訪(fǎng)問(wèn)訪(fǎng)問(wèn) 任一對(duì)任一對(duì) 象字段象字段x 方法的調(diào)用方法的調(diào)用a .m2(3)a .m2(3)可以翻譯成可以翻譯成m2_A(&a,3)m2_A(&a,3)machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院457.4 7.4 動(dòng)態(tài)存儲(chǔ)器(續(xù))動(dòng)態(tài)存儲(chǔ)器(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院46
42、繼承特性繼承特性現(xiàn)在假定類(lèi)現(xiàn)在假定類(lèi)B B通過(guò)增添方法通過(guò)增添方法m3m3和字段和字段b1b1來(lái)擴(kuò)展類(lèi)來(lái)擴(kuò)展類(lèi)A,A,那么類(lèi)那么類(lèi)B B的運(yùn)行時(shí)表示如下:的運(yùn)行時(shí)表示如下:a1a1a2a2m1_Am1_Am2_Am2_Ab1b1另外類(lèi)另外類(lèi)B B的方法編譯時(shí)表如下:的方法編譯時(shí)表如下:m3_Bm3_B7.4 7.4 動(dòng)態(tài)存儲(chǔ)器(續(xù))動(dòng)態(tài)存儲(chǔ)器(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院47方法重載方法重載假定上例中類(lèi)假定上例中類(lèi)B B重新定義了方法重新定義了方法m2m2,那么那么A A中方法中方法m2m2的定義既是它唯的定義既是它唯一的聲明也是它的第
43、一次定義,而它在類(lèi)一的聲明也是它的第一次定義,而它在類(lèi)B B中的定義為重定義。中的定義為重定義。為使名字既可以反映聲明它的類(lèi),也可以反映定義它的類(lèi)。方法的為使名字既可以反映聲明它的類(lèi),也可以反映定義它的類(lèi)。方法的名字可有三部分組成:名字可有三部分組成:方法名、聲明方法的類(lèi)名、定義方法類(lèi)名方法名、聲明方法的類(lèi)名、定義方法類(lèi)名。各部分之間用下劃線(xiàn)(各部分之間用下劃線(xiàn)()分開(kāi)。因此在類(lèi))分開(kāi)。因此在類(lèi)A A中聲明在類(lèi)中聲明在類(lèi)B B中定義的中定義的方法方法m2m2其名字記為其名字記為m2_A_Bm2_A_B。方法重載影響方法的編譯時(shí)表,現(xiàn)在類(lèi)方法重載影響方法的編譯時(shí)表,現(xiàn)在類(lèi)A A的方法的編譯時(shí)表如
44、下:的方法的編譯時(shí)表如下:m1_A_Am1_A_Am2_A_Am2_A_Am1_A_Am1_A_Am2_A_Bm2_A_Bm3_B_Bm3_B_B類(lèi)類(lèi)B B的方法的的方法的編譯時(shí)表如右:編譯時(shí)表如右:7.4 7.4 動(dòng)態(tài)存儲(chǔ)器(續(xù))動(dòng)態(tài)存儲(chǔ)器(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境o 現(xiàn)在假定現(xiàn)在假定a是類(lèi)是類(lèi)A的一個(gè)對(duì)象,而的一個(gè)對(duì)象,而b是類(lèi)是類(lèi)B的一個(gè)對(duì)象的一個(gè)對(duì)象n 方法調(diào)用方法調(diào)用a.m2()將翻譯成對(duì)將翻譯成對(duì)m2_A_A的調(diào)用,而方的調(diào)用,而方法調(diào)用法調(diào)用b.m2()將翻譯成對(duì)將翻譯成對(duì)m2_A_B的調(diào)用。的調(diào)用。o 2_A_A在類(lèi)在類(lèi)A中聲明和定義。中聲明和定義。m2_A_B
45、在類(lèi)在類(lèi)A中生明,在中生明,在類(lèi)類(lèi)B中定義。中定義。n m2_A_A翻譯形式為:翻譯形式為:o void m2_A_A(Class_A *this, int i);n m2_A_B的翻譯形式為:的翻譯形式為:o void m2_A_B(Class_B *this, int i);machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院487.4 7.4 動(dòng)態(tài)存儲(chǔ)器(續(xù))動(dòng)態(tài)存儲(chǔ)器(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院49多態(tài)性多態(tài)性當(dāng)類(lèi)當(dāng)類(lèi)B B繼承類(lèi)繼承類(lèi)A A,并且該語(yǔ)言允許,并且該語(yǔ)言允許“類(lèi)類(lèi)B B的指針的指針”類(lèi)型的指針類(lèi)型的指針能夠賦給一個(gè)能
46、夠賦給一個(gè)“類(lèi)類(lèi)A A的指針的指針”類(lèi)型的變量時(shí),那么該語(yǔ)言類(lèi)型的變量時(shí),那么該語(yǔ)言支持多態(tài)型。例如:支持多態(tài)型。例如: Class B Class B * *b=b=; ; Class A Class A * *a=b;a=b;則第二行被翻譯成:則第二行被翻譯成: class A class A * *a=convert_ptr_to_B_to_ptr_to_A(b);a=convert_ptr_to_B_to_ptr_to_A(b);現(xiàn)在,過(guò)程現(xiàn)在,過(guò)程convert_ptr_to_B_to_ptr_to_A()convert_ptr_to_B_to_ptr_to_A()為一編譯為一編譯時(shí)
47、類(lèi)型的操作時(shí)類(lèi)型的操作, ,它將指向子類(lèi)它將指向子類(lèi)B B的一個(gè)對(duì)象指針轉(zhuǎn)換為指的一個(gè)對(duì)象指針轉(zhuǎn)換為指向其父類(lèi)向其父類(lèi)A A對(duì)象的指針。因?yàn)轭?lèi)對(duì)象的指針。因?yàn)轭?lèi)B B的對(duì)象也是從類(lèi)的對(duì)象也是從類(lèi)A A的字的字段開(kāi)始,因而指針的值并不需要改變,唯一影響的是改段開(kāi)始,因而指針的值并不需要改變,唯一影響的是改變了指針的類(lèi)型:變了指針的類(lèi)型:7.4 7.4 動(dòng)態(tài)存儲(chǔ)器(續(xù))動(dòng)態(tài)存儲(chǔ)器(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院50a1a1a2a2b1b1指向指向B B的指針的指針指向指向B B中中A A的指針的指針現(xiàn)在同一指針指向了不同類(lèi)的對(duì)象現(xiàn)在同一指針指
48、向了不同類(lèi)的對(duì)象7.4 7.4 動(dòng)態(tài)存儲(chǔ)器(續(xù))動(dòng)態(tài)存儲(chǔ)器(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院517.4 7.4 動(dòng)態(tài)存儲(chǔ)器(續(xù))動(dòng)態(tài)存儲(chǔ)器(續(xù))o 動(dòng)態(tài)綁定動(dòng)態(tài)綁定:類(lèi)型:類(lèi)型class Aclass A* *的指針的指針p p可能引用了類(lèi)可能引用了類(lèi)B B的一個(gè)的一個(gè)對(duì)象,動(dòng)態(tài)綁定認(rèn)為如果實(shí)際上為類(lèi)對(duì)象,動(dòng)態(tài)綁定認(rèn)為如果實(shí)際上為類(lèi)B B的對(duì)象,那就應(yīng)該的對(duì)象,那就應(yīng)該調(diào)用調(diào)用m2_A_B,m2_A_B,如果實(shí)際為如果實(shí)際為A A的對(duì)象,那么就應(yīng)該調(diào)用的對(duì)象,那么就應(yīng)該調(diào)用m2_A_A.m2_A_A.對(duì)于方法調(diào)用對(duì)于方法調(diào)用p-m2(3)p
49、-m2(3)o p p是一指向類(lèi)是一指向類(lèi)A A對(duì)象指針,可以將對(duì)象指針,可以將p-m2(3)p-m2(3)被翻譯成如下被翻譯成如下形式:形式: switch(dynamic_type_of(p) case Dynamic_class_A: m2_A_A(p,3); case Dynamic_class_B: m2_A_B(convert_ptr_to_A_to_ptr_to_B(p),3);o 當(dāng)當(dāng)p p為一指向類(lèi)為一指向類(lèi)B B對(duì)象指針時(shí),可以將對(duì)象指針時(shí),可以將p-m2(3)p-m2(3) 翻譯為:翻譯為:m2_A_B(p,3);m2_A_B(p,3);第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)
50、境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院52對(duì)于上述的翻譯方法,每一個(gè)對(duì)象的類(lèi)型信息實(shí)現(xiàn)為一個(gè)對(duì)于上述的翻譯方法,每一個(gè)對(duì)象的類(lèi)型信息實(shí)現(xiàn)為一個(gè)指向分派表的指針,如下圖所示指向分派表的指針,如下圖所示( (分派表是存儲(chǔ)方法地址分派表是存儲(chǔ)方法地址的記錄,下圖分派表存儲(chǔ)的是方法的記錄,下圖分派表存儲(chǔ)的是方法m1_A_Am1_A_A, m2_A_B m2_A_B和和 m1_B_Bm1_B_B的地址的地址) )a1a1a2a2b1b1指向指向B B的指針的指針指向指向B B中中A A的指針的指針m1_A_Am1_A_Am2_A_Bm2_A_Bm3_B_Bm3_B_B類(lèi)類(lèi)B B對(duì)象的表示對(duì)象的
51、表示分派表分派表B-objectB-objectB-classB-class7.4 7.4 動(dòng)態(tài)存儲(chǔ)器(續(xù))動(dòng)態(tài)存儲(chǔ)器(續(xù))第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院537.4.2 堆管理堆管理7.4 7.4 動(dòng)態(tài)存儲(chǔ)器(續(xù))動(dòng)態(tài)存儲(chǔ)器(續(xù))o 對(duì)于允許程序?yàn)樽兞吭谶\(yùn)行時(shí)動(dòng)態(tài)申請(qǐng)和釋對(duì)于允許程序?yàn)樽兞吭谶\(yùn)行時(shí)動(dòng)態(tài)申請(qǐng)和釋放存儲(chǔ)空間的語(yǔ)言放存儲(chǔ)空間的語(yǔ)言,采用堆式分配是最有效采用堆式分配是最有效的解決方案的解決方案.o 堆式分配的基本思想是堆式分配的基本思想是,為運(yùn)行的程序劃出為運(yùn)行的程序劃出適當(dāng)大的空間適當(dāng)大的空間(稱(chēng)為堆稱(chēng)為堆Heap),每當(dāng)程序申請(qǐng)空
52、每當(dāng)程序申請(qǐng)空間時(shí)間時(shí),就從堆的空閑區(qū)找出一塊空間分配給就從堆的空閑區(qū)找出一塊空間分配給程序程序,每當(dāng)釋放時(shí)則回收之每當(dāng)釋放時(shí)則回收之.第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院54堆分配的必要性堆分配的必要性7.4 7.4 動(dòng)態(tài)存儲(chǔ)器(續(xù))動(dòng)態(tài)存儲(chǔ)器(續(xù))o在在C中處理鏈表等結(jié)構(gòu)時(shí)中處理鏈表等結(jié)構(gòu)時(shí),常常隨機(jī)地插入或刪除一些結(jié)點(diǎn)常常隨機(jī)地插入或刪除一些結(jié)點(diǎn),利用利用指針變量和結(jié)構(gòu)類(lèi)型指針變量和結(jié)構(gòu)類(lèi)型,可動(dòng)態(tài)地生成新結(jié)點(diǎn)可動(dòng)態(tài)地生成新結(jié)點(diǎn)(使用使用malloc()函數(shù)函數(shù)), 或刪除之或刪除之(使用使用free()函數(shù)函數(shù)).o例如例如 struct
53、node char data; struct node *next;定義了鏈表的結(jié)定義了鏈表的結(jié)點(diǎn)點(diǎn),下面函數(shù)可在表的尾部添加新結(jié)點(diǎn)下面函數(shù)可在表的尾部添加新結(jié)點(diǎn):n void Append(struct node *head,char ch) struct node *p=head;n while(*p) p=p-next; p-next=malloc(sizeof(struct node);n p-next-data=ch; p-next-next=NULL;o還可用下面的函數(shù)在表頭刪除一結(jié)點(diǎn)還可用下面的函數(shù)在表頭刪除一結(jié)點(diǎn):nvoid Delete(struct node *head)
54、struct node *p=head; n if(*p) head =head-next; free(p); 第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院55堆存儲(chǔ)管理的實(shí)現(xiàn)堆存儲(chǔ)管理的實(shí)現(xiàn)7.4 7.4 動(dòng)態(tài)存儲(chǔ)器(續(xù))動(dòng)態(tài)存儲(chǔ)器(續(xù))o 將存儲(chǔ)空間劃分為若干存儲(chǔ)塊將存儲(chǔ)空間劃分為若干存儲(chǔ)塊;用戶(hù)可隨機(jī)地申請(qǐng)用戶(hù)可隨機(jī)地申請(qǐng)或釋放一個(gè)或多個(gè)塊或釋放一個(gè)或多個(gè)塊;o 在存儲(chǔ)空間中建立兩個(gè)隊(duì)列在存儲(chǔ)空間中建立兩個(gè)隊(duì)列:空閑隊(duì)列和忙隊(duì)列空閑隊(duì)列和忙隊(duì)列,空空閑隊(duì)列拉成鏈閑隊(duì)列拉成鏈,鏈?zhǔn)子面準(zhǔn)子肍REE指針指明指針指明,忙隊(duì)列用一忙隊(duì)列用一(已占?jí)K已占?jí)K)記
55、錄表記錄各占用塊的首址及大小信息記錄表記錄各占用塊的首址及大小信息(也也可用鏈進(jìn)行記錄可用鏈進(jìn)行記錄).o 申請(qǐng)時(shí)可按需要找到合適的塊分配之申請(qǐng)時(shí)可按需要找到合適的塊分配之(分配策略有分配策略有最佳分配或隨機(jī)分配等最佳分配或隨機(jī)分配等);o 釋放時(shí)將該塊插入到空閑隊(duì)列釋放時(shí)將該塊插入到空閑隊(duì)列(能合并時(shí)可合并能合并時(shí)可合并),并并從占用記錄表中刪除相應(yīng)的項(xiàng)從占用記錄表中刪除相應(yīng)的項(xiàng).第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院567.1 7.1 程序執(zhí)行時(shí)的存儲(chǔ)器組織程序執(zhí)行時(shí)的存儲(chǔ)器組織7.2 7.2 完全靜態(tài)的運(yùn)行時(shí)環(huán)境完全靜態(tài)的運(yùn)行時(shí)環(huán)境7.3 7.
56、3 基于棧的運(yùn)行時(shí)環(huán)境基于棧的運(yùn)行時(shí)環(huán)境7.4 7.4 動(dòng)態(tài)存儲(chǔ)器動(dòng)態(tài)存儲(chǔ)器7.5 7.5 參數(shù)存儲(chǔ)機(jī)制參數(shù)存儲(chǔ)機(jī)制第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境( (存儲(chǔ)空間存儲(chǔ)空間) )第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院577.5 7.5 參數(shù)傳遞機(jī)制參數(shù)傳遞機(jī)制void inc2( int x)/* incorrect! */ +x;+x; void inc2( int* x)/* now ok */ +(*x);+(*x); o 值傳遞值傳遞:值傳遞的處理方法是:進(jìn)入過(guò)程時(shí)值傳遞的處理方法是:進(jìn)入過(guò)程時(shí),送入形參對(duì)應(yīng)的形式送入形參對(duì)應(yīng)的形式單元的是
57、相應(yīng)實(shí)參的值單元的是相應(yīng)實(shí)參的值;過(guò)程體中對(duì)形參的任何賦值都按對(duì)形式;過(guò)程體中對(duì)形參的任何賦值都按對(duì)形式單元的直接訪(fǎng)問(wèn)來(lái)產(chǎn)生代碼。形參和實(shí)參不是同一個(gè)存儲(chǔ)單元。單元的直接訪(fǎng)問(wèn)來(lái)產(chǎn)生代碼。形參和實(shí)參不是同一個(gè)存儲(chǔ)單元。n因此因此,一旦把實(shí)參之值送入對(duì)應(yīng)形式單元之后一旦把實(shí)參之值送入對(duì)應(yīng)形式單元之后,在執(zhí)行過(guò)程體期間在執(zhí)行過(guò)程體期間,除了以實(shí)參值作為形參的初值進(jìn)行運(yùn)算之外除了以實(shí)參值作為形參的初值進(jìn)行運(yùn)算之外,將將不再與實(shí)參發(fā)生任不再與實(shí)參發(fā)生任何聯(lián)系。由此可見(jiàn)何聯(lián)系。由此可見(jiàn), 過(guò)過(guò) 程執(zhí)行的結(jié)果決不會(huì)改變實(shí)參之值。程執(zhí)行的結(jié)果決不會(huì)改變實(shí)參之值。第第7 7章章 運(yùn)行時(shí)環(huán)境運(yùn)行時(shí)環(huán)境machunyan西北工業(yè)大學(xué)軟件與微電子學(xué)院58void inc2( int &x)/* C+ reference parameter */ +x;+x; 7.5 7.5 參數(shù)傳遞機(jī)制(續(xù))參數(shù)傳遞機(jī)制(續(xù))o 引用傳遞引用傳遞:將實(shí)參的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)用無(wú)紡布合同范本
- 2025版多人股東企業(yè)發(fā)展戰(zhàn)略合作協(xié)議范本
- 2025年度新型環(huán)保材料腳手架搭設(shè)工程承包協(xié)議
- 2025年優(yōu)鋼項(xiàng)目可行性研究報(bào)告
- 2025年度健康產(chǎn)品推廣贊助合同范本
- 4蠶變了新模樣 教學(xué)設(shè)計(jì)-2023-2024學(xué)年科學(xué)三年級(jí)下冊(cè)教科版
- 2025年度電影項(xiàng)目保密協(xié)議書(shū)
- 中國(guó)旅游業(yè)行業(yè)市場(chǎng)深度調(diào)查評(píng)估及投資方向研究報(bào)告
- 燈飾 購(gòu)銷(xiāo)合同范本
- 2024-2025年中國(guó)新型顯示器行業(yè)投資潛力分析及行業(yè)發(fā)展趨勢(shì)報(bào)告
- 高教版2023年中職教科書(shū)《語(yǔ)文》(基礎(chǔ)模塊)上冊(cè)教案全冊(cè)
- 存款代持協(xié)議書(shū)范文模板
- 2023年部編人教版三年級(jí)《道德與法治》下冊(cè)全冊(cè)課件【全套】
- 光伏項(xiàng)目施工總進(jìn)度計(jì)劃表(含三級(jí))
- DB32-T 4757-2024 連棟塑料薄膜溫室建造技術(shù)規(guī)范
- 部編版小學(xué)語(yǔ)文四年級(jí)下冊(cè)教師教學(xué)用書(shū)(教學(xué)參考)完整版
- 小兒泄瀉(小兒腹瀉病)診療方案
- 種子內(nèi)部構(gòu)造圖片集
- 羊水栓塞的處理)
- 初中英語(yǔ)考試答題卡(可編輯WORD版)
- 風(fēng)光高壓變頻器用戶(hù)手冊(cè)最新2011-11-17
評(píng)論
0/150
提交評(píng)論