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

正文內(nèi)容

06-第6章-運(yùn)行時(shí)存儲空間的組織和管理-編譯原理-中國科(已改無錯(cuò)字)

2023-02-02 03:14:44 本頁面
  

【正文】 的訪問 program dynamic(input, output)。 var r: real。 procedure show。 begin write(r: 5: 3) end。 procedure small。 var r: real。 begin r := 。 show end。 begin (綠色表示已執(zhí)行部分 ) r := 。 show。 small。 writeln。 show。 small。 writeln end. dynamic show small small show show show r dynamic r ? 靜態(tài)區(qū) 使用值的地方 棧區(qū) 暫存值的地方 非局部名字的訪問 program dynamic(input, output)。 var r: real。 procedure show。 begin write(r: 5: 3) end。 procedure small。 var r: real。 begin r := 。 show end。 begin (綠色表示已執(zhí)行部分 ) r := 。 show。 small。 writeln。 show。 small。 writeln end. dynamic show small small show show show r dynamic r ? show 靜態(tài)區(qū) 使用值的地方 棧區(qū) 暫存值的地方 非局部名字的訪問 program dynamic(input, output)。 var r: real。 procedure show。 begin write(r: 5: 3) end。 procedure small。 var r: real。 begin r := 。 show end。 begin (綠色表示已執(zhí)行部分 ) r := 。 show。 small。 writeln。 show。 small。 writeln end. dynamic show small small show show show r dynamic r ? small r 靜態(tài)區(qū) 使用值的地方 棧區(qū) 暫存值的地方 非局部名字的訪問 program dynamic(input, output)。 var r: real。 procedure show。 begin write(r: 5: 3) end。 procedure small。 var r: real。 begin r := 。 show end。 begin (綠色表示已執(zhí)行部分 ) r := 。 show。 small。 writeln。 show。 small。 writeln end. dynamic show small small show show show r dynamic r ? small r 靜態(tài)區(qū) 使用值的地方 棧區(qū) 暫存值的地方 非局部名字的訪問 program dynamic(input, output)。 var r: real。 procedure show。 begin write(r: 5: 3) end。 procedure small。 var r: real。 begin r := 。 show end。 begin (綠色表示已執(zhí)行部分 ) r := 。 show。 small。 writeln。 show。 small。 writeln end. dynamic show small small show show show r dynamic r ? 靜態(tài)區(qū) 使用值的地方 棧區(qū) 暫存值的地方 參 數(shù) 傳 遞 值調(diào)用 ? 實(shí)參的右值傳給被調(diào)用過程 ? 值調(diào)用可以如下實(shí)現(xiàn) – 把形參當(dāng)作所在過程的局部名看待 , 形參的存儲單元在該過程的活動記錄中 – 調(diào)用過程 計(jì)算實(shí)參 , 并把其右值放入 被調(diào)用過程形參的存儲單元中 參 數(shù) 傳 遞 引用調(diào)用 ? 實(shí)參的左值傳給被調(diào)用過程 ? 引用調(diào)用可以如下實(shí)現(xiàn): – 把形參當(dāng)作所在過程的局部名看待 , 形參的存儲單元在該過程的活動記錄中 – 調(diào)用過 程計(jì)算實(shí)參 , 把實(shí)參的左值放入被調(diào)用過程形參的存儲單元 – 在被調(diào)用過程的目標(biāo)代碼中 , 任何對形參的引用都是通過傳給該過程的指針來間接引用實(shí)參 參 數(shù) 傳 遞 換名調(diào)用 從概念上說 , 每次調(diào)用時(shí) , 用實(shí)參表達(dá)式對 形參進(jìn)行正文替換 , 然后再執(zhí)行 procedure swap(var x, y: integer)。 var temp: integer。 begin temp := x。 x := y。 y := temp end 參 數(shù) 傳 遞 換名調(diào)用 從概念上說 , 每次調(diào)用時(shí) , 用實(shí)參表達(dá)式對 形參進(jìn)行正文替換 , 然后再執(zhí)行 procedure swap(var x, y: integer)。 var temp: integer。 例如: 調(diào)用 swap(i, a[i]) begin temp := x。 x := y。 y := temp end 參 數(shù) 傳 遞 換名調(diào)用 從概念上說 , 每次調(diào)用時(shí) , 用實(shí)參表達(dá)式對 形參進(jìn)行正文替換 , 然后再執(zhí)行 procedure swap(var x, y: integer)。 var temp: integer。 例如: 調(diào)用 swap(i, a[i]) begin 替換結(jié)果: temp := i。 temp := x。 i := a[i]。 x := y。 a[i] := temp y := temp end 參 數(shù) 傳 遞 換名調(diào)用 從概念上說 , 每次調(diào)用時(shí) , 用實(shí)參表達(dá)式對 形參進(jìn)行正文替換 , 然后再執(zhí)行 procedure swap(var x, y: integer)。 var temp: integer。 例如: 調(diào)用 swap(i, a[i]) begin 替換結(jié)果: temp := i。 temp := x。 i := a[i]。 x := y。 a[i] := temp y := temp 交換兩個(gè)數(shù)據(jù)的程序 end 并非總是正確 堆 管 理 堆式分配 ? 堆用來存放生存期不確定的數(shù)據(jù) – C++和 Java允許程序員用 new創(chuàng)建對象 , 它們的生存期沒有被約束在創(chuàng)建它們的過程活動的生成期之內(nèi) – 實(shí)現(xiàn)內(nèi)存回收是內(nèi)存管理器的責(zé)任 ? 堆空間的回收有兩種不同方式 – 程序顯式釋放空間: free( C) 或 delete( C++) – 垃圾收集器自動收集 ( Java) 。 收集算法 , 本課程不做介紹 堆 管 理 內(nèi)存管理器 ? 內(nèi)存管理器把握的基本信息是堆中空閑空間 – 分配函數(shù) – 回收函數(shù) ? 內(nèi)存管理器應(yīng)具有下列性質(zhì) – 空間有效性:極小化程序需要的堆空間總量 – 程序有效性:較好地利用內(nèi)存子系統(tǒng) , 使得程序能運(yùn)行得快一些 – 低開銷 : 分配和回收操作所花時(shí)間在整個(gè)程序執(zhí)行時(shí)間中的比例盡量小 堆 管 理 計(jì)算機(jī)內(nèi)存分層 虛擬內(nèi)存 (磁盤 ) 物理內(nèi)存 2級緩存 1級緩存 寄存器 (處理器 ) 典型大小 2千兆字節(jié) 256兆 ?2千兆字節(jié) 128千 ?4兆字節(jié) 16?64千字節(jié) 32字 典型訪問時(shí)間 3?15微秒 100?150納秒 40?60納秒 5?10納秒 1納秒 堆 管 理 計(jì)算機(jī)內(nèi)存分層 – 現(xiàn)代計(jì)算機(jī)都設(shè)計(jì)成程序員不用關(guān)心內(nèi)存子系統(tǒng)的細(xì)節(jié)就可以寫出正確的程序 – 程序的效率不僅取決于被執(zhí)行的指令數(shù) , 還取決于執(zhí)行每條指令需要多長時(shí)間 – 執(zhí)行一條指令的時(shí)間區(qū)別非??捎^ – 差異源于硬件技術(shù)的基本局限:構(gòu)造不了大容量的高速存儲器 – 數(shù)據(jù)以塊 ( 緩存行 、 頁 ) 為單位在相鄰層次之間進(jìn)行傳送 – 數(shù)據(jù)密集型程序可從恰當(dāng)利用內(nèi)存子系統(tǒng)中獲益 堆 管 理 程序局部性 ? 大多數(shù)程序的大部分時(shí)間在執(zhí)行一小部分代碼 , 并且僅涉及一小部分?jǐn)?shù)據(jù) ? 時(shí)間局部性 – 程序訪問的內(nèi)存單元在很短的時(shí)間內(nèi)可能再次被程序訪問 ? 空間局部性 – 毗鄰被訪問單元的內(nèi)存單元在很短的時(shí)間內(nèi)可能被訪問 堆 管 理 程序局部性 – 即使知道哪些指令會被頻繁執(zhí)行 , 最快的緩存也可能沒有大到足以把它們同時(shí)放在其中 , 因此必須動態(tài)調(diào)整最快緩存的內(nèi)容 – 把最近使用的指令保存在緩存是一種較好的最優(yōu)化利用內(nèi)存分層的策略 – 改變數(shù)據(jù)布局或計(jì)算次序也可以改進(jìn)程序數(shù)據(jù)訪問的時(shí)間和空間局部性 堆 管 理 例: 一個(gè)結(jié)構(gòu)體大數(shù)組 分拆成若干個(gè)數(shù)組 struct student { int num[10000]。 int num。 char name[10000][20]。 char name[20]。 … … … … } struct student st[10000]。 ? 若是順序處理每個(gè)結(jié)構(gòu)體的多個(gè)域 , 左邊方式的數(shù)據(jù)局部性較好 ? 若是先順序處理每個(gè)結(jié)構(gòu)的 num域 , 再處理每個(gè)結(jié)構(gòu)的 name域 , … , 則右邊方式的數(shù)據(jù)局部性較好 ? 最好是按左邊方式編程 , 由編譯器決定是否需要將數(shù)據(jù)按右邊方式布局 堆 管 理 手工回收請求 ? 程序員在程序中顯式釋放堆塊來達(dá)到回收堆塊的目的 – 內(nèi)存泄漏:沒有釋放程序已經(jīng)引用不到的堆塊 只要內(nèi)存沒有用盡 , 它就不影響程序的正確性 自動無用單元收集通過回收所有無用單元來擺脫內(nèi)存泄漏 – 懸空引用:引用已經(jīng)被釋放的堆塊 過分熱心地釋放數(shù)據(jù)對象而引起 懸空引用容易導(dǎo)致不會被捕獲的錯(cuò)誤 本 章 要 點(diǎn) ? 影響存儲分配策略的語言特征 ? 各種存儲分配策略 , 主要了解靜態(tài)分配和動態(tài)棧式分配 ? 活動記錄中各種數(shù)據(jù)域的作用和布局 ? 非局部數(shù)據(jù)訪問的實(shí)現(xiàn)方法 ? 各種參數(shù)傳遞方式及其實(shí)現(xiàn) ? 堆管理 例 題 1 一個(gè) C語言程序及其在 X86/Linux操作系統(tǒng)上的編譯結(jié) 果如下 。 根據(jù)所生成的匯編程序來解釋程序中四個(gè)變 量的存儲分配 、 生存期 、 作用域和置初值方式等方面 的區(qū)別 static long aa = 10。 short bb = 20。 func( ) { static long cc = 30。 short dd = 40。 } 例 題 1 .data | .align 4 .align 4 | .type ,object .type aa,object | .size ,4 .size aa,4 | : aa: | .long 30 .long 10 | .text .globl bb | .align 4 .align 2 | .globl func .type bb,object | func: .size bb,2 | . . . bb: | movw $40,2(%ebp) .value 20 | . . . static long aa = 10。 short bb = 20。 func( ) { static long cc = 30。 short dd = 40。 } 例 題 1 .
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1