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

正文內(nèi)容

目標(biāo)程序運(yùn)行時的組織教材-閱讀頁

2025-03-03 02:27本頁面
  

【正文】 temp end; 調(diào)用 swap(a,b) 過程將不會影響 a和 b的值。 var temp:integer。 x:=y; y:=temp end; 調(diào)用 swap(i,a[i]) 其結(jié)果等價于執(zhí)行下列運(yùn)算: 1把 i和 a[i]的地址分別放到 x和 y相應(yīng)的單元 a1,a2 2( temp :=x; )temp的內(nèi)容置為 a1所指單元中存的內(nèi)容 3 (x :=y。 (3){ int temp。 *x=*y。 (5)} (6)main( ) (7){ int a=1,b=2。 (9) printf(“ a is now %d,b is now %d\n” ,a,b)。 過程調(diào)用的四元式序列 S ? call id(arglist) arglist ? arglist,E arglist ? E par T1 par T2 par Tn call id,n 過程調(diào)用的四元式序列 (1)S ? call id(arglist){for 隊列 arglist.q的 每一項 P do {gen(par,,,p)。 gen(call,,,entry(id))} (2)arglist ? arglist1,E{把 arglist.q 的末端; (3)arglist ? E 過程作為參數(shù)傳遞 三種環(huán)境:詞法環(huán)境 傳遞環(huán)境 活動環(huán)境 program param(input,output)。 (*) var m:integer。 writeln(h(2)) end。 (*) var m:integer。 () begin f:=m+n end{f}。 b(f) end {c} begin c end. ? (1)program param(input,output)。 ? (3) begin writeln(h(2)) end。 ? (5) var m:integer。 ? (7) begin f:=m+n end{f}。 b(f) end {c}。 因此 , 這個方法有時也被稱為復(fù)制進(jìn) , 復(fù)制出 , 或復(fù)制存儲 。 例如 , 在以下的代碼中 ( C語法 ) : void p (int x, int y) {++x。 } main() {int a=1。 return 0。 名字傳遞 這是傳遞機(jī)制中最復(fù)雜的參數(shù)了 。 因此 , 自變量的名稱或是它在調(diào)用點上的結(jié)構(gòu)表示取代了它對應(yīng)的參數(shù)的名字 。} 中,若做了一個如 p(a[i])的調(diào)用時,其結(jié)果是計算++(a[i])。 int a [10]。 ++x。 a[1]=1。 p(a[i])。 } 對 p的調(diào)用的結(jié)果是將 a[2]設(shè)置為 3并保持 a[1]不變 。我們總是在調(diào)用程序的環(huán)境中計算自變,而總是在過程的定義環(huán)境中執(zhí)行過程。n:=1。 while k=n do begin di:=uili+ 1。 c:=c*di+li。 申請 m個空間 , 令首地址為 a。 | public a,b,c。 | public virtual void draw() }。 | public void sift(){…}。 堆式動態(tài)存儲分配 堆變量 堆空間的管理策略 減少碎片的技術(shù) 空間的釋放 C++的堆變量 Int *Ptr。 Myclass(int k,int j)。n=j。 Private: int m,n。 Myclass::Myclass(){ Set(0,0)。 } Myclass::Myclass(int k,int j) { Set(k,j)。 } Myclass:: ?Myclass() { Cout“ Destructor” endl。 Myclass *ptr1=new Myclass。 Cout“ two” endl。 Delete ptr1。 } one Defalt Destructor two m=5 Destructor 堆式動態(tài)存儲分配 Const int ArraySize=24。 IntArray(const IntArray)。} I n t A r r a y o p e r a t o r = ( c o n s t IntArray)。 int getSize() {return size。 int * ia。 IntArray()函數(shù)的實現(xiàn) , 引入新的運(yùn)算符 new IntArray::IntArray ( int sz) { size= sz。 // initialize array for (int i=0。++i) ia[i]=0。 標(biāo)準(zhǔn)過程dispose是釋放空間 . new與 dispose不斷改變著堆存儲器的使用情況 。即尋找那些運(yùn)行程序業(yè)己無用但尚未釋放的占用塊 堆管理 堆空間的管理策略 減少碎片的技術(shù) 空間的釋放 堆空間的管理策略 1 定長塊管理 2 變長塊管理 堆式動態(tài)儲分配的實現(xiàn) 1 定長塊管理 堆式動態(tài)儲分配最簡單的實現(xiàn)是按定長塊進(jìn)行 。 分配時每次都分配指針 available所指的塊 , 然后available指向相鄰的下一塊 。 考慮插入方便 , 可以把所歸還的塊插在 av a ilab le所指的塊之前 , 然后available指向新歸還的塊 。按這種方法,初始化時存儲空間是一個整塊。再進(jìn)行分配時,從空閑塊鏈表中找出滿足需要的一塊,或者整塊分配出去,或者從該塊上分割一小塊分配出去。通常在選擇時需考慮下列因素:用戶的要求;請求分配量的大小分布;分配和釋放的頻率以及效率對系統(tǒng)的重要等等。 ( 2) 最優(yōu)滿足法:將空閑塊鏈表中一個不小于申請塊且最接近于申請塊的空閑塊分配給用戶 , 則系統(tǒng)在分配前首先要對空閑塊鏈表從頭至尾描一遍 , 然后從中找出一塊 , 為避免每次分配都要掃描整個鏈表 , 通常將空閑塊鏈表空間的大小從小到大排序 。 此時的空閑塊鏈表按空閑的塊的大小從大到小排序 。 減少碎片的技術(shù) 1分配時,找最小的足夠大的塊 需保持空閑塊的大小排序 2 釋放時,合并任何相鄰的塊 搜索全部空閑塊表,或其它算法 3 將堆變量緊縮在一起 空間的釋放 1顯式釋放 2隱式(自動)釋放 顯式釋放 程序設(shè)計語言提供機(jī)制 如: pascal 的 dispose C 的 free 程序員必須編寫分配和釋放存儲的明確的調(diào)用 注意的問題 1 堆變量是不可訪問的(垃圾) 2 懸掛(不安全)指針 堆式分配和釋放的 C語言描述 define NULL 0 define MEMSIZE 8096 /* change for different sizes */ typedef fdouble Align。 unsigned usedsize。 }s。 }Header。 static Header *memptr= NULL。 unsigned nunits。 if (memptr == NULL) {memptrs. next = memptr = mem。 memptrs. freesize = MEMSIZE1。 (ps. next!= memptr) (ps. freesize nunits)。 if (ps. freesize nunits) return NULL。 newps. usedsize= nunits。 newp = ps. next。 ps. next= newp。 return (void *)(newp+1)。 bp= (Header *) ap –1。 (p!=bp) (p!= memptr)。 if (p!=bp) return。 prevs. next = ps. next。 } 堆的自動管理 隱式存儲回收 在一種需要完全動態(tài)的運(yùn)行時環(huán)境的語言( OO語言 , 函數(shù)式語言 Lisp,ML)中 , 堆也必須類似地自動管理 。 這個過程稱作垃圾回收 ( grabage collection) 。 在存儲塊不再引用時,無論是直接還是通過指針間接的引用,識別這些存儲塊是一項比維護(hù)堆存儲 的列表復(fù)雜得多的任務(wù)。為了實現(xiàn)并行工作,在存儲塊中要設(shè)置回收子程序訪問的信息。 ( 1) 第一個階段為標(biāo)記階段 , 對已分配的塊跟蹤程序中各指針的訪問路徑 。 ( 2) 第二個階段為回收階段 , 所有未加標(biāo)記的存儲塊回收到一起 , 并插入空閑塊鏈表中 , 然后消除在存儲塊中所加的全部標(biāo)記 。 面向?qū)ο笳Z言在對運(yùn)行時方面的要求差異很大 。但這樣做極浪費(fèi)空間。接著同用于它的實例變量的域一起,每個對象保持一個指向其定義類的指針,通過這個類就可找到所有(局部和繼承的)的方法。由于是通過類繼承的搜索來找到這個機(jī)制的,所以該機(jī)制還實現(xiàn)繼承性與動態(tài)聯(lián)編。這是對于諸如 Smalltalk的高度動態(tài)語言的合理的結(jié)構(gòu),因為類結(jié)構(gòu)可以在執(zhí)行中改變。 它的優(yōu)點在于:可做出安排以使每個方法都有一個可預(yù)測的偏移量 ,而且也不再需要用一系列表查詢遍歷類的層次結(jié)構(gòu) 。 例 C++類聲明: class A {public: double x,y。 virtual void g()。 class B:public A {public: double z。 virtual void h()。 類 A的一個對象應(yīng)出現(xiàn)在存儲器中 ( 帶有它的虛擬函數(shù)表 ) 而類 B的一個對象則應(yīng)如下所示: x y vtp A::g B::h A::g X Y vtp z
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1