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

正文內容

06-第6章-運行時存儲空間的組織和管理-編譯原理-中國科(存儲版)

2025-02-03 03:14上一頁面

下一頁面
  

【正文】 局部存儲分配 名字的作用域和綁定 名字的作用域 ? 一個聲明起作用的程序部分稱為該聲明的 作用域 ? 即使一個名字在程序中只聲明一次,該名字在程序運行時也可能表示不同的數據對象 局部存儲分配 環(huán)境和狀態(tài) ? 環(huán)境把名字映射到左值,而狀態(tài)把左值映射到右值(即 名字到值有兩步映射 ) ? 賦值改變狀態(tài),但不改變環(huán)境 ? 過程調用改變環(huán)境 ? 如果環(huán)境將名字 x映射到存儲單元 s, 則說 x被綁定 到 s 名字 存儲單元 狀態(tài) 值 環(huán)境 局部存儲分配 靜態(tài)概念和動態(tài)概念的對應 靜 態(tài) 概 念 動 態(tài) 對 應 過程的定義 過程的活動 局部存儲分配 靜態(tài)概念和動態(tài)概念的對應 靜 態(tài) 概 念 動 態(tài) 對 應 過程的定義 過程的活動 名字的聲明 名字的綁定 局部存儲分配 靜態(tài)概念和動態(tài)概念的對應 靜 態(tài) 概 念 動 態(tài) 對 應 過程的定義 過程的活動 名字的聲明 名字的綁定 聲明的作用域 綁定的生存期 局部存儲分配 活動記錄 活動記錄的常見布局 返 回 值 臨 時 數 據 參 數 控 制 鏈 訪 問 鏈 機 器 狀 態(tài) 局 部 數 據 局部存儲分配 局部數據的布局 ? 字節(jié)是可編址內存的最小單位 ? 變量所需的存儲空間可以根據其類型而靜態(tài)確定 ? 一個過程所聲明的局部變量 , 按這些變量聲明時出現的次序 , 在局部數據域中依次分配空間 ? 局部數據的地址可以用相對于活動記錄中某個位置的地址來表示 ? 數據對象的存儲布局還有一個對齊問題 局部存儲分配 ? 例 在 SPARC/Solaris工作站上下面兩個結構體的 size分別是 24和 16, 為什么不一樣 ? typedef struct _a{ typedef struct _b{ char c1。 }a。 4 double f。 4 char c2。 int b = 0。 }/? end of B2 ?/ {/? begin of B3 ?/ int b = 3。 全局棧式存儲分配 棧上可變長數據 活動記錄的長度在編譯時不能確定的情況 ? 例:局部數組的大小要等到過程激活時才能確定 備注: Java語言的實現是將它們分配在堆上 全局棧式存儲分配 訪問動態(tài)分配的數組 控制鏈 數組 A的指針 數組 B的指針 top_sp base_sp . . . . . . . . . 棧 (1) 編譯時,在活動記錄中為這樣的數組分配存放數組指針的單元 全局棧式存儲分配 訪問動態(tài)分配的數組 (2) 運行時,這些指針指向分配在棧頂的數組存儲空間 控制鏈 數組 A的指針 數組 B的指針 top_sp base_sp . . . . . . . . . 棧 數組 A 數組 B 全局棧式存儲分配 訪問動態(tài)分配的數組 (3) 運行時,對數組 A和 B的訪問都要通過相應指針來間接訪問 控制鏈 數組 A的指針 數組 B的指針 top_sp base_sp . . . . . . . . . 棧 數組 A 數組 B 全局棧式存儲分配 訪問動態(tài)分配的數組 q的數組 q的活動記錄 p的數組 p的活動記錄 控制鏈 top_sp base_sp 數組 A的指針 數組 B的指針 數組 A 數組 B 控制鏈 . . . . . . . . . 棧 全局棧式存儲分配 懸空引用 懸空引用: 引用某個已被釋放的存儲單元 全局棧式存儲分配 懸空引用 懸空引用: 引用某個已被釋放的存儲單元 例: main中引用 p指向的對象 main( ) { | int ? dangle ( ) { int ?q。 var m: integer。 var m: integer。 function f(n: integer)… begin f := m+n end {f}。 begin m := 0。 begin m:= 0。 var m: integer。 b(f) end. a ret b addm 執(zhí)行 addm時, a的活動記錄已不存在,取不到 m的值 非局部名字的訪問 ? C語言的函數聲明不能嵌套 , 函數不論在什么情況下激活 , 要訪問的數據分成兩種情況 – 非靜態(tài)局部變量 ( 包括形式參數 ) , 它們分配在活動記錄棧頂的那個活動記錄中 – 外部變量 ( 包括定義在其它源文件之中的外部變量 ) 和靜態(tài)的局部變量 , 它們都分配在靜態(tài)數據區(qū) – 因此 C語言允許函數 ( 的指針 ) 作為返回值 非局部名字的訪問 動態(tài)作用域 ? 被調用過程的非局部名字 a和它在調用過程中引用的是同樣的存儲單元 – 基于 運行時的調用關系 – 而不 是基于靜態(tài)作用域來確定 ? 新的綁定僅為被調用過程的局部名字建立 ,這些名字在被調用過程的活動記錄中占用存儲單元 – 這一點 與靜態(tài)作用域沒有區(qū)別 非局部名字的訪問 program dynamic(input, output)。 begin r := 。 procedure show。 small。 procedure small。 show。 var r: real。 small。 show end。 var r: real。 show。 begin write(r: 5: 3) end。 writeln。 var r: real。 small。 show end。 var temp: integer。 var temp: integer。 temp := x。 … … … … } struct student st[10000]。 func( ) { static long cc = 30。 func( ) { static long cc = 30。 func( ) { static long cc = 30。 j= i 1。 pushl %ebp 老的基地址指針壓棧 { movl %esp,%ebp修改 基地址指針 long j。 decl %edx i – 1 } movl %edx,4(%ebp) i – 1 ? j movl 4(%ebp),%eax pushl %eax 把實參 j的值壓棧 call func 函數調用 addl $4,%esp 恢復棧頂指針 L1: leave 即 mov ebp, esp。 subl $4,%esp 為 j分配空間 j= i 1。 pop ebp ret 即 pop eip(下條指令地址 ) . . . . . . ebp esp 參數 i 返址 控制鏈 例 題 2 func(i) func: long i。 movl 8(%ebp),%edx 取 i到 寄存器 func(j)。 pop ebp ret 即 pop eip(下條指令地址 ) . . . . . . ebp esp 參數 i 返址 例 題 2 func(i) func: long i。 subl $4,%esp 為 j分配空間 j= i 1。 decl %edx i – 1 } movl %edx,4(%ebp) i – 1 ? j movl 4(%ebp),%eax pushl %eax 把實參 j的值壓棧 call func 函數調用 addl $4,%esp 恢復棧頂指針 L1: leave 即 mov ebp, esp。 } 例 題 2 func(i) long i。 } 例 題 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。 } 例 題 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。 } 例 題 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。 char name[10000][20]。 var temp: integer。 x := y。 small。 var r: real。 writeln。 begin write(r: 5: 3) end。 show。 var r: real。 show end。 small。 var r: real。 writeln。 begin write(r: 5: 3) end。 small。 procedure show。 begin 靜態(tài)作用域 r := 。 writeln end. dynamic show small small show show show 非局部名字的訪問 program dynamic(input, output)。 begin r := 。 begin writeln (g(2)) end。( 過程作為返回值 ) var f: function (integer): integer。 function addm (n
點擊復制文檔內容
高考資料相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1