




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第十章 存儲(chǔ)組織10.1 概述10.2 數(shù)據(jù)空間的管理10.3 棧式動(dòng)態(tài)存儲(chǔ)分配的實(shí)現(xiàn)10.4 參數(shù)傳送10.5 跟過(guò)程相關(guān)的語(yǔ)義分析10.1 概述操作系統(tǒng)分配給目的程序運(yùn)轉(zhuǎn)所需的內(nèi)存空間此內(nèi)存空間的詳細(xì)運(yùn)用由編譯程序在語(yǔ)義分析階段確定此內(nèi)存空間分為兩大部分:代碼段、數(shù)據(jù)段數(shù)據(jù)段包括P23110.2 數(shù)據(jù)空間的運(yùn)用方法存儲(chǔ)分配戰(zhàn)略: 靜態(tài)存儲(chǔ)分配 棧式動(dòng)態(tài)存儲(chǔ)分配 堆式動(dòng)態(tài)存儲(chǔ)分配靜態(tài)存儲(chǔ)分配特點(diǎn)編譯時(shí)辰確定存儲(chǔ)位置訪問(wèn)效率高主要用途子程序的目的代碼段全局?jǐn)?shù)據(jù)目的全局變量10.2 數(shù)據(jù)空間的運(yùn)用方法棧式存儲(chǔ)分配把程序看作由多個(gè)過(guò)程子程序、函數(shù)等組成每進(jìn)入一個(gè)過(guò)程,在棧頂為它分配所需的數(shù)據(jù)空間;
2、當(dāng)一個(gè)過(guò)程任務(wù)終了之后,相應(yīng)的數(shù)據(jù)空間將被釋放。主程序AR活動(dòng)記錄活動(dòng)記錄活動(dòng)記錄運(yùn)轉(zhuǎn)棧圖示10.2 數(shù)據(jù)空間的運(yùn)用方法過(guò)程1過(guò)程2過(guò)程3過(guò)程0堆式存儲(chǔ)分配用于動(dòng)態(tài)數(shù)據(jù)構(gòu)造存儲(chǔ)空間的動(dòng)態(tài)分配和釋放實(shí)現(xiàn)方法: 將內(nèi)存空間分為假設(shè)干塊,根據(jù)用戶要求分配無(wú)法滿足時(shí),調(diào)用無(wú)用單元搜集程序?qū)⒈会尫诺膲K搜集起來(lái)重新分配10.2 數(shù)據(jù)空間的運(yùn)用方法對(duì)過(guò)程的語(yǔ)義處置過(guò)程闡明的翻譯計(jì)算真實(shí)參數(shù)、前往值的空間過(guò)程體的翻譯計(jì)算部分變量、暫時(shí)變量的空間10.3 棧式動(dòng)態(tài)存儲(chǔ)分配的實(shí)現(xiàn)過(guò)程的活動(dòng)記錄AR Activation Record 一段延續(xù)的存儲(chǔ)區(qū),用以存放過(guò)程的一次執(zhí)行所需的信息。程序由過(guò)程組成,當(dāng)過(guò)程被激活
3、時(shí),在運(yùn)轉(zhuǎn)棧的棧頂設(shè)置相應(yīng)的AR:暫時(shí)值:例如計(jì)算表達(dá)式時(shí)的中間任務(wù)單元。部分變量數(shù)據(jù)保管運(yùn)轉(zhuǎn)過(guò)程前的形狀程序計(jì)數(shù)器,存放器值存取鏈可選:對(duì)于非部分量的援用??刂奇?老SP)可選:指向調(diào)用者的AR。實(shí)參方式單元前往值對(duì)函數(shù),有時(shí)可運(yùn)用存放器存放前往值前往地址:保管該被調(diào)過(guò)程前往后的地址 簡(jiǎn)單言語(yǔ)的分配方案言語(yǔ)的構(gòu)造特點(diǎn):過(guò)程可遞歸調(diào)用不允許嵌套定義沒(méi)有分程序構(gòu)造允答應(yīng)變數(shù)組(P234 圖10.7;見(jiàn)右例)例: main 全局變量的闡明 proc R end R; proc Q end Q;主程序執(zhí)行語(yǔ)句 end main10.3 棧式動(dòng)態(tài)存儲(chǔ)分配的實(shí)現(xiàn)MainQRMainQQR的活動(dòng)記錄Q的活
4、動(dòng)記錄主程序全局?jǐn)?shù)據(jù)區(qū)TOPSPSPSPTOPQ的活動(dòng)記錄SPQ的活動(dòng)記錄主程序全局?jǐn)?shù)據(jù)區(qū)SPSP10.3 棧式動(dòng)態(tài)存儲(chǔ)分配的實(shí)現(xiàn)Q之AR全局?jǐn)?shù)據(jù)區(qū)TOPSPR 之AR全局?jǐn)?shù)據(jù)區(qū)MainQR退出MainR的活動(dòng)記錄Q的活動(dòng)記錄主程序全局?jǐn)?shù)據(jù)區(qū)TOPSPR的數(shù)組區(qū)10.3 棧式動(dòng)態(tài)存儲(chǔ)分配的實(shí)現(xiàn)暫時(shí)任務(wù)單元 部分簡(jiǎn)單變量部分?jǐn)?shù)組的內(nèi)情向量 調(diào)用前的形狀 實(shí)參和參數(shù)個(gè)數(shù)控制鏈老SP TOPSP前往地址老SP:指向調(diào)用者的AR起始位置R的活動(dòng)記錄假設(shè)R含有可變數(shù)組例P236圖10.11sortvar a;readarray;a;exchange;quicksort;partition;a;excha
5、nge;quicksort;嵌套過(guò)程言語(yǔ)的分配方案言語(yǔ)主要特點(diǎn):一個(gè)過(guò)程可以援用包圍它的任一外層過(guò)程所定義的標(biāo)識(shí)符如變量,數(shù)組或過(guò)程等。10.3 棧式動(dòng)態(tài)存儲(chǔ)分配的實(shí)現(xiàn)過(guò)程012問(wèn)題:如何援用非部分標(biāo)識(shí)符?實(shí)現(xiàn)方法:一個(gè)過(guò)程可以援用它的任一外層過(guò)程的最新AR中的某些數(shù)據(jù)。關(guān)鍵技術(shù):處理對(duì)非部分變量的援用(存取)也就是說(shuō),設(shè)法跟蹤每個(gè)外層過(guò)程的最新活動(dòng)記錄AR的位置。跟蹤方法: 1. 存取鏈。 2. DISPLAY表。10.3 棧式動(dòng)態(tài)存儲(chǔ)分配的實(shí)現(xiàn)指向定義該過(guò)程的直接外層過(guò)程或主程序運(yùn)轉(zhuǎn)時(shí)最新活動(dòng)記錄的基地址。例如:PL/0 留意與控制鏈又名動(dòng)態(tài)鏈 SP相區(qū)別:控制鏈指向調(diào)用者的AR,存取鏈指
6、向定義者的AR。兩鏈的指向位置有能夠一樣,也能夠不同。10.3 棧式動(dòng)態(tài)存儲(chǔ)分配的實(shí)現(xiàn)存取鏈SL ,又名:靜態(tài)鏈(PL/0)P237圖10.13、圖10.14 、圖10.15嵌套層次顯示表Display表display是一個(gè)指針數(shù)組d,自頂向下,每個(gè)單元依次存放現(xiàn)行層、直接外層直至最外層0層的每一層過(guò)程的最新活動(dòng)記錄的基地址。10.3 棧式動(dòng)態(tài)存儲(chǔ)分配的實(shí)現(xiàn)d 0 存 第0層d 1 1d 2 2d n n SP0 SP1 SP2d 0d 1d 2display 0老SP1 前往地址2全局DISPLAY地址3 參數(shù)個(gè)數(shù) 4方式單元. d display .簡(jiǎn)單變量 數(shù)組內(nèi)情向量 暫時(shí)變量 當(dāng)過(guò)程
7、的層次為n,它的 display為n+1個(gè)值。 一個(gè)過(guò)程被調(diào)用時(shí),從調(diào)用過(guò)程的display表中自下向上抄錄n個(gè)SP值,再加上本層的SP值。全局display地址10.3 棧式動(dòng)態(tài)存儲(chǔ)分配的實(shí)現(xiàn)各個(gè)過(guò)程的display存放在本人的AR中10.3 棧式動(dòng)態(tài)存儲(chǔ)分配的實(shí)現(xiàn)用Display表的方案(1)主程序-(2)P-(3)Q-(4)R主程序的活動(dòng)記錄 d0spdisplaytop1P的活動(dòng) 記錄主程序的活動(dòng)記錄 d1d0displaysptop210.3 棧式動(dòng)態(tài)存儲(chǔ)分配的實(shí)現(xiàn)用Display表的方案 主程序-(2)P-(3)Q-(4)RR的活動(dòng) 記錄 Q的活動(dòng) 記錄P的活動(dòng) 記錄主程序的活動(dòng)記
8、錄 d1d0 displaytopsp34Q的活動(dòng) 記錄P的活動(dòng) 記錄主程序的活動(dòng)記錄 displayd2d1d0sptop10.3 棧式動(dòng)態(tài)存儲(chǔ)分配的實(shí)現(xiàn)分程序構(gòu)造Procedure A(m,n); integer m,n; B1:begin real z; array Bm:n; B2:begin real d, e; L3: end; B4:begin array C1:m; B5:begin real e; L6: end; end; L8:end; 10.3 棧式動(dòng)態(tài)存儲(chǔ)分配的實(shí)現(xiàn)分程序構(gòu)造的存儲(chǔ)分配方案方法之一:把分程序看成“無(wú)名無(wú)參過(guò) 程,它在哪里定義就在哪里被調(diào)用。因此,可以把
9、處置過(guò)程的存儲(chǔ)方法運(yùn)用四處置分程序中。但極為低效: 1每逢進(jìn)入一個(gè)分程序,就照樣建立銜接數(shù)據(jù)和DISPLAY表,這是不用要的。 2對(duì)于多層嵌套的分程序,當(dāng)從內(nèi)層分程序向外層轉(zhuǎn)移時(shí),能夠要同時(shí)終了假設(shè)干層分程序。10.3 棧式動(dòng)態(tài)存儲(chǔ)分配的實(shí)現(xiàn)按照過(guò)程處置方法,意味著必需一層一層地經(jīng)過(guò)“前往 來(lái)恢復(fù)所要到達(dá)的那個(gè)分程序的數(shù)據(jù)區(qū),但不能直接到達(dá)。 例如:假設(shè)有一個(gè)從第5層分程序轉(zhuǎn)出到達(dá)第1層分程序的標(biāo)號(hào)L,雖然在第5層分程序任務(wù)時(shí)知道L所屬的層數(shù),我們極易從display中獲得第1層分程序的活動(dòng)記錄基址SP,但是怎樣知道第1層分程序進(jìn)入時(shí)的TOP呢?獨(dú)一的方法是從 5,4,3和2各層順序退出。但這
10、種方法是很浪費(fèi)時(shí)間的。10.3 棧式動(dòng)態(tài)存儲(chǔ)分配的實(shí)現(xiàn) 為理處理上述問(wèn)題,可采取兩種措施:第一,對(duì)每個(gè)過(guò)程或分程序都建立有本人的棧頂指示器TOP,替代原來(lái)僅有過(guò)程的棧頂指示器, 每個(gè)TOP的值保管在各自活動(dòng)記錄中。這樣,上述的第二個(gè)問(wèn)題便可處理。第二,不把分程序看作“無(wú)參過(guò)程,每個(gè)分程序享用包圍它的那個(gè)最近過(guò)程的display。每個(gè)分程序都隸屬于某個(gè)確定的過(guò)程,分程序的層次是相對(duì)于它所屬的那個(gè)過(guò)程進(jìn)展編號(hào)的。10.3 棧式動(dòng)態(tài)存儲(chǔ)分配的實(shí)現(xiàn):每個(gè)過(guò)程被當(dāng)作是0層分程序。而過(guò)程體分程序假定是一個(gè)分程序當(dāng)作是它所管轄的第1層分程序。這樣,每個(gè)過(guò)程的活動(dòng)記錄所含的內(nèi)容有:1.過(guò)程的TOP值,它指向過(guò)
11、程活動(dòng)記錄的棧頂位置。2.銜接數(shù)據(jù),共四項(xiàng): (1)老SP值; (2)前往地址; (3)全局display地址; (4)調(diào)用時(shí)的棧頂單元地址,老TOP。10.3 棧式動(dòng)態(tài)存儲(chǔ)分配的實(shí)現(xiàn) 3. 參數(shù)個(gè)數(shù)和方式單元 4. display表。過(guò)程所轄的各分程序的部分?jǐn)?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í)任務(wù)單元。10.3 棧式動(dòng)態(tài)存儲(chǔ)分配的實(shí)現(xiàn) 數(shù) 組B 數(shù) 組B e dB2的T O PB的 內(nèi) 情 向 量B 的 內(nèi) 情 向 量 z zB1 的T O PB1的T
12、O PD I S P L A YD I S P L A Y 方式單元 m,n 2 方式單元 m,n 2連 接 數(shù) 據(jù)銜接 數(shù) 據(jù)A的T O PA的T O P (c) (d)(c )數(shù)組B分配之后;d進(jìn)入分程序10.4 過(guò)程調(diào)用的參數(shù)傳送(1) procedure exchangel(i,j:integer);(2) var x:integer;(3) begin;(4) x:=ai; ai:=aj; aj:=x(5) end;帶有非部分變量和形參的PASCAL過(guò)程非局變量ai和aj的值進(jìn)展交換,i,j為形參在這里是傳值(1) program reference(input,output);(2
13、) var a,b:integer;(3) procedure swap(var x,y:integer);(4) var temp:integer;(5) begin (6) temp:=x;(7) x:=y;(8) y:=temp(9) end;(10) begin /*reference*/(11) a:=1; b:=2;(12) swap(a,b);(13) writeln(a=,a);writeln(b=,b)(14) end. /*swap*/10.4 過(guò)程調(diào)用的參數(shù)傳送過(guò)程參數(shù)以傳地址方式被調(diào)用的PASCAL程序傳地址變量參數(shù)例如:過(guò)程 swap(var x,y:integer)
14、; swap(a,b; a,b為調(diào)用時(shí)的實(shí)參 調(diào)用結(jié)果a,b的值被改動(dòng)。傳值值調(diào)用例如:過(guò)程 swap(x,y:integer);特點(diǎn)是對(duì)方式參數(shù)的任何運(yùn)算不影響實(shí)參的值。swap(a,b;其結(jié)果: a,b調(diào)用前的值不改動(dòng)。10.4 過(guò)程調(diào)用的參數(shù)傳送傳值的實(shí)現(xiàn)1.方式參數(shù)當(dāng)作過(guò)程的部分變量處置,即在被調(diào)過(guò)程的活動(dòng)記錄中開(kāi)辟形參的存儲(chǔ)空間,這些存儲(chǔ)位置即是我們所說(shuō)的方式單元用以存放實(shí)參。2.調(diào)用過(guò)程計(jì)算實(shí)參的值,并將其放在對(duì)應(yīng)方式單元開(kāi)辟的空間中。3.被調(diào)用過(guò)程執(zhí)行時(shí),就像運(yùn)用部分變量一樣運(yùn)用這些方式單元。10.4 過(guò)程調(diào)用的參數(shù)傳送procedure swap( x,y:integer);
15、var temp:integer; begin temp:=x; x:=y; y:=temp end; 調(diào)用swap(a,b) 過(guò)程將不會(huì)影響a和b的值。 其結(jié)果等價(jià)于執(zhí)行以下運(yùn)算: x :=a; y :=b; temp :=x; x :=y; y :=temp10.4 過(guò)程調(diào)用的參數(shù)傳送傳地址的實(shí)現(xiàn)把實(shí)參的地址傳送給相應(yīng)的形參,即調(diào)用過(guò)程把一個(gè)指向?qū)崊⒌拇鎯?chǔ)地址的指針傳送給被調(diào)用過(guò)程相應(yīng)的形參:1、實(shí)參是一個(gè)名字,或具有左值的表達(dá)式傳送左值2、真實(shí)參數(shù)是無(wú)左值的表達(dá)式計(jì)算值,放入到一存儲(chǔ)單元,傳此存儲(chǔ)單元地址3、目的代碼中,被調(diào)用過(guò)程對(duì)形參的援用變成對(duì)傳送給被調(diào)用過(guò)程的指針的間接援用10.4
16、 過(guò)程調(diào)用的參數(shù)傳送procedure swap(var x,y:integer); var temp:integer; begin temp:=x; x:=y; y:=temp end; 調(diào)用swap(i,ai) 其結(jié)果等價(jià)于執(zhí)行以下運(yùn)算:1.把 i和ai的地址分別放到x和y相應(yīng)的單元a1,a2 2.( temp :=x;)temp的內(nèi)容置為a1所指單元中存的內(nèi)容3.(x :=y;) a1所指單元的內(nèi)容置為a2所指單元值4.( y :=temp) a2所指單元的內(nèi)容置為temp的值10.4 過(guò)程調(diào)用的參數(shù)傳送 (1)swap(x,y)(2)int *x,*y;(3) int temp;(4)
17、 temp=*x; *x=*y; *y=temp;(5)(6)main( )(7) int a=1,b=2;(8) swap(&a,&b);(9) printf(“a is now %d,b is now %dn,a,b);(10) 在一個(gè)值調(diào)用過(guò)程中運(yùn)用指針的C程序在C程序中無(wú)傳地址所以用指針實(shí)現(xiàn)。10.4 過(guò)程調(diào)用的參數(shù)傳送值結(jié)果傳送 除了未建立真正的別名之外,這個(gè)機(jī)制得到的結(jié)果與援用傳送類(lèi)似:在過(guò)程中復(fù)制和運(yùn)用自變量的值,然后當(dāng)過(guò)程退出時(shí),再將參數(shù)的最終值復(fù)制回自變量的地址。因此,這個(gè)方法有時(shí)也被稱(chēng)為復(fù)制進(jìn),復(fù)制出,或復(fù)制存儲(chǔ)。值結(jié)果傳送與援用傳送的獨(dú)一區(qū)別在于別名的表現(xiàn)不同。例如,在以
18、下的代碼中C語(yǔ)法:void p (int x, int y)+x;+y;main()int a=1;p(a,a);return 0; 在調(diào)用p之后,假設(shè)運(yùn)用了地址傳送,那么a的值為3;假設(shè)運(yùn)用了值結(jié)果傳送那么a的值為2。10.4 過(guò)程調(diào)用的參數(shù)傳送名字傳送這是傳送機(jī)制中最復(fù)雜的參數(shù)了。由于名字傳送的思想是直到在被調(diào)用的程序真正運(yùn)用了自變量作為一個(gè)參數(shù)之后才對(duì)這個(gè)自變量賦值,所以它還稱(chēng)作延盡賦值delayed evaluation。因此,自變量的稱(chēng)號(hào)或是它在調(diào)用點(diǎn)上的構(gòu)造表示取代了它對(duì)應(yīng)的參數(shù)的名字。例如在代碼 void p (int x) +x;中,假設(shè)做了一個(gè)如p(ai)的調(diào)用時(shí),其結(jié)果是計(jì)
19、算+(ai)。因此,假設(shè)在p中運(yùn)用x之前改動(dòng)i,那么它的結(jié)果就與在援用傳送或在值結(jié)果傳送中的不同 10.4 過(guò)程調(diào)用的參數(shù)傳送int i;int a 10;void p (int x) +i; +x;main () i=1; a1=1; a2=2; p(ai); return 0;對(duì)p的調(diào)用的結(jié)果是將a2設(shè)置為3并堅(jiān)持a1不變。10.4 過(guò)程調(diào)用的參數(shù)傳送名字傳送的解釋如下:在調(diào)用點(diǎn)上的自變量的文本被看作是它本人右邊的函數(shù),生當(dāng)在被用的過(guò)程的代碼中到達(dá)相應(yīng)的參數(shù)名時(shí),就要計(jì)算它。我們總是在調(diào)用程序的環(huán)境中計(jì)算自變,而總是在過(guò)程的定義環(huán)境中執(zhí)行過(guò)程。10.4 過(guò)程調(diào)用的參數(shù)傳送一、過(guò)程闡明語(yǔ)句的
20、翻譯;闡明語(yǔ)句或函數(shù)定義的語(yǔ)義處置分析參數(shù)的類(lèi)型、分配地址統(tǒng)計(jì)參數(shù)和前往值的空間需求表格管理完成過(guò)程名的屬性登錄二、過(guò)程調(diào)用的翻譯;建立AR、Display表等10.5 跟過(guò)程相關(guān)的語(yǔ)義分析過(guò)程調(diào)用的語(yǔ)義翻譯1 在過(guò)程 P1中調(diào)用過(guò)程P2 時(shí)a. P1 對(duì)真實(shí)參數(shù)求值,將結(jié)果存入P2的活動(dòng)記錄參數(shù)域b. 在P2的活動(dòng)記錄中存放前往地址和當(dāng)前棧頂指針c. 按照活動(dòng)記錄的大小,上移棧頂指針d. 從P2的入口開(kāi)場(chǎng)執(zhí)行e. P2存放存放器值和其它形狀信息f. 執(zhí)行P2的定義體10.5 跟過(guò)程相關(guān)的語(yǔ)義分析2從過(guò)程P2前往時(shí)a. P2在前往值域中保管前往值b. 恢復(fù)原棧頂指針和其它存放器c. 按前往地址
21、轉(zhuǎn)移,直接運(yùn)用前往值進(jìn)展計(jì)算10.5 跟過(guò)程相關(guān)的語(yǔ)義分析過(guò)程調(diào)用的代碼參數(shù)傳送 param x完成 1 a.調(diào)用 call f完成 1 b. c. d.函數(shù)入口完成 1 e.過(guò)程出口 return x完成 2 a. b. c.10.5 跟過(guò)程相關(guān)的語(yǔ)義分析A A1 , E過(guò)程調(diào)用表達(dá)式的翻譯方案 S.code := A.code | gen(callid.entry,A.num) A.num := 1; A.code := E.code | gen(param E.place) A.num := A1.num+1; A.code := A1.code |E.code| gen(param E
22、.place) 產(chǎn)生式語(yǔ)義規(guī)那么S id ( A );A E10.5 跟過(guò)程相關(guān)的語(yǔ)義分析例:函數(shù)調(diào)用 f (3+a, 6) 的翻譯3 + a6生成的目的代碼: t1 := 3 + a param t1 param 6 call f , 2 /*參數(shù)個(gè)數(shù)為2 */10.5 跟過(guò)程相關(guān)的語(yǔ)義分析過(guò)程調(diào)用的四元式序列 S call id() ,E E par T1 par T2 par Tn call id,n10.5 跟過(guò)程相關(guān)的語(yǔ)義分析過(guò)程調(diào)用的四元式序列S call id() for 隊(duì)列.q的每一項(xiàng)P do gen(par,-,-,p);n:=n+1; gen(call,-,-,entry
23、(id) 1,E 把E.place排在.q的末端; E10.5 跟過(guò)程相關(guān)的語(yǔ)義分析(1) program param(input,output);(2) procedure b(function h(n:integer):integer);(3) begin writeln(h(2) endb;(4) procedure c;(5) var m:integer;(6) function f(n:integer):integr;(7) begin f:=m+n endf;(8) begin m := 0; b(f) end c;(9) begin(10) c(11)end. 過(guò)程作為參數(shù)傳送1
24、0.5 跟過(guò)程相關(guān)的語(yǔ)義分析10.5 跟過(guò)程相關(guān)的語(yǔ)義分析堆式動(dòng)態(tài)存儲(chǔ)分配以下不講堆式動(dòng)態(tài)存儲(chǔ)分配堆變量堆空間的管理戰(zhàn)略減少碎片的技術(shù)空間的釋放C+的堆變量Int *Ptr;Ptr=new int(5); Int *ptr= new int 10Delete ptrDelete ptr堆變量是可以在程序運(yùn)轉(zhuǎn)時(shí)根據(jù)需求隨時(shí)創(chuàng)建或刪除的變量C+的堆對(duì)象#includeClass MyclassPublic: Myclass(); Myclass(int k,int j); void Set(int,int)m=k;n=j; Myclass();Private: int m,n;Myclass:My
25、class() Set(0,0);CoutDefaultendl;Myclass:Myclass(int k,int j) Set(k,j);Cout“m=“mendl;Myclass: Myclass() Cout“Destructorendl;運(yùn)用new和delete的例如#includeInt main() Cout“oneendl;Myclass *ptr1=new Myclass;Delete ptr1;Cout“twoendl;Ptr1=new Myclass(5,10);Delete ptr1;Return 0; oneDefaltDestructortwom=5Destruct
26、or堆式動(dòng)態(tài)存儲(chǔ)分配Const int ArraySize=24;/ default sizeClass IntArrayPublic:/operations performed on arrays IntArray(int sz=ArraySize); IntArray(const IntArray&); IntArray() delete ia; IntArray& operator= (const IntArray&); int& operator (int); int getSize() return size;protected:/internal data representati
27、on int size; int * ia;IntArray()函數(shù)的實(shí)現(xiàn),引入新的運(yùn)算符newIntArray:IntArray int sz) size= sz;/ allocate an integer array of size/ and set ia to point to itia= new int size;/ initialize arrayfor (int i=0;is. next = memptr = mem;memptr-s. usedsize = 1;memptr-s. freesize = MEMSIZE-1;for (p=memptr;(p-s. next!= me
28、mptr) &(p-s. freesize s. next);if (p-s. freesize nunits) return NULL;/* no block big enough */newp = p+p-s. usedsize;newp-s. usedsize= nunits;newp-s. freesize = p-s. freesize-nunits;newp-s.next = p-s. next;p-s. freesize=0;p-s. next= newp;memptr=newp;return (void *)(newp+1);void free (void *ap)Header
29、 * bp, *p, *prev;bp= (Header *) ap 1;for (prev= memptr, p=memptr-s. next;(p!=bp) &(p!= memptr); prev=p, p=p-s. next);if (p!=bp) return;/* corrupted list, do nothing */prev-s. freesize += p-s. usedsize + p-s. freesize;prev-s. next = p-s. next;memptr = prev;堆的自動(dòng)管理-隱式存儲(chǔ)回收在一種需求完全動(dòng)態(tài)的運(yùn)轉(zhuǎn)時(shí)環(huán)境的言語(yǔ)OO言語(yǔ),函數(shù)式言語(yǔ)Lis
30、p,ML)中,堆也必需類(lèi)似地自動(dòng)管理。自動(dòng)存儲(chǔ)器管理涉及到了前面分配的但不再運(yùn)用的存儲(chǔ)器的回收,能夠是在它被分配的很久以后,而沒(méi)有明確的對(duì)free的調(diào)用。這個(gè)過(guò)程稱(chēng)作渣滓回收grabage collection。 渣滓回收渣滓回收程序-尋覓可被援用的一切存儲(chǔ)器并釋一切未援用的存儲(chǔ)器。在存儲(chǔ)塊不再援用時(shí),無(wú)論是直接還是經(jīng)過(guò)指針間接的援用,識(shí)別這些存儲(chǔ)塊是一項(xiàng)比維護(hù)堆存儲(chǔ) 的列表復(fù)雜得多的義務(wù)。方法-對(duì)malloc的調(diào)用失敗,激活渣滓回收程序渣滓回收算法 mark and sweep隱式存儲(chǔ)回收mark and sweep算法 隱式存儲(chǔ)回收要求用戶程序和支持運(yùn)轉(zhuǎn)的回收子程序并行任務(wù),由于回收程序需求知道分配給用戶程序的存儲(chǔ)塊何時(shí)不再運(yùn)用。為了實(shí)現(xiàn)并行任務(wù),在存儲(chǔ)塊中要設(shè)置回收子程序訪問(wèn)的信息。 存儲(chǔ)塊格
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 唐山市常態(tài)化管理辦法
- 地鐵防水施工管理辦法
- 如何開(kāi)展科研管理辦法
- 科技轉(zhuǎn)移機(jī)構(gòu)管理辦法
- 肥胖中醫(yī)辨證課件
- 野外測(cè)量培訓(xùn)課件
- 供電公司青年培訓(xùn)課件
- 房石鎮(zhèn)九年級(jí)數(shù)學(xué)試卷
- 福建閩侯小升初數(shù)學(xué)試卷
- 定興期末考試數(shù)學(xué)試卷
- 開(kāi)油鍋紅袖章制度
- 江蘇譯林版小學(xué)英語(yǔ)單詞匯總表-帶音標(biāo)可打印
- 高壓靜電場(chǎng)對(duì)儲(chǔ)藏果蔬保鮮效果的影響
- 護(hù)理規(guī)培結(jié)業(yè)考試復(fù)習(xí)題庫(kù)800題(含答案)
- 大學(xué)物理A1試卷B稿及參考答案
- 2023年考研考博-考博英語(yǔ)-揚(yáng)州大學(xué)考試歷年高頻考點(diǎn)真題薈萃帶答案
- 企業(yè)管理一6S推行
- 滁州市機(jī)電工程學(xué)校工作人員招聘考試真題2022
- 診斷學(xué)血管檢查
- 無(wú)腳手架安裝方法講師用培訓(xùn)修改版
- 職業(yè)衛(wèi)生(副)高級(jí)職稱(chēng)考試案例分析題及答案
評(píng)論
0/150
提交評(píng)論