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

正文內容

06-第6章-運行時存儲空間的組織和管理-編譯原理-中國科-免費閱讀

2025-01-30 03:14 上一頁面

下一頁面
  

【正文】 decl %edx i – 1 } movl %edx,4(%ebp) i – 1 ? j movl 4(%ebp),%eax pushl %eax 把實參 j的值壓棧 call func 函數(shù)調用 addl $4,%esp 恢復棧頂指針 L1: leave 即 mov ebp, esp。 pushl %ebp 老的基地址指針壓棧 { movl %esp,%ebp修改 基地址指針 long j。 movl 8(%ebp),%edx 取 i到 寄存器 func(j)。 pop ebp ret 即 pop eip(下條指令地址 ) . . . 參數(shù) i 返址 控制鏈 變量 j . . . ebp esp 棧 低 高 例 題 2 func(i) func: long i。 { long j。 short bb = 20。 short bb = 20。 short bb = 20。 char name[20]。 例如: 調用 swap(i, a[i]) begin 替換結果: temp := i。 y := temp end 參 數(shù) 傳 遞 換名調用 從概念上說 , 每次調用時 , 用實參表達式對 形參進行正文替換 , 然后再執(zhí)行 procedure swap(var x, y: integer)。 writeln end. dynamic show small small show show show r dynamic r ? 靜態(tài)區(qū) 使用值的地方 棧區(qū) 暫存值的地方 參 數(shù) 傳 遞 值調用 ? 實參的右值傳給被調用過程 ? 值調用可以如下實現(xiàn) – 把形參當作所在過程的局部名看待 , 形參的存儲單元在該過程的活動記錄中 – 調用過程 計算實參 , 并把其右值放入 被調用過程形參的存儲單元中 參 數(shù) 傳 遞 引用調用 ? 實參的左值傳給被調用過程 ? 引用調用可以如下實現(xiàn): – 把形參當作所在過程的局部名看待 , 形參的存儲單元在該過程的活動記錄中 – 調用過 程計算實參 , 把實參的左值放入被調用過程形參的存儲單元 – 在被調用過程的目標代碼中 , 任何對形參的引用都是通過傳給該過程的指針來間接引用實參 參 數(shù) 傳 遞 換名調用 從概念上說 , 每次調用時 , 用實參表達式對 形參進行正文替換 , 然后再執(zhí)行 procedure swap(var x, y: integer)。 begin r := 。 show。 procedure small。 small。 procedure show。 begin (綠色表示已執(zhí)行部分 ) r := 。 writeln end. dynamic show small small show show show r dynamic r ? 靜態(tài)區(qū) 使用值的地方 棧區(qū) 暫存值的地方 非局部名字的訪問 program dynamic(input, output)。 begin r := 。 show。 procedure small。 writeln。 begin write(r: 5: 3) end。 show。 var r: real。 show end。 begin f := a。 function a: function (integer): integer。 begin return m+n end。 function f(n: integer)… begin f := m+n end {f}。 var m: integer。 procedure c。 procedure c。 top_sp的值在此過程中被改變 返回值和參數(shù) top_sp base_sp 臨時數(shù)據(jù)局部數(shù)據(jù) 控制鏈 和保存的機器狀態(tài) ? ? ? 返回值和參數(shù) top_sp 全局棧式存儲分配 過程 p調用過程 q的調用序列 (2) p把返回地址和當前 base_sp的值存入 q的活動記錄中,建立 q的訪問鏈,增加 base_sp的值 返回值和參數(shù) top_sp base_sp 臨時數(shù)據(jù)局部數(shù)據(jù) 控制鏈 和保存的機器狀態(tài) ? ? ? 返回值和參數(shù) 控制鏈和返回地址 base_sp top_sp 全局棧式存儲分配 過程 p調用過程 q的調用序列 (3) q保存寄存器的值和其它機器狀態(tài)信息 返回值和參數(shù) top_sp base_sp 臨時數(shù)據(jù)局部數(shù)據(jù) 控制鏈 和保存的機器狀態(tài) ? ? ? 返回值和參數(shù) 控制鏈 和保存的機器狀態(tài) 全局棧式存儲分配 過程 p調用過程 q的調用序列 (4) q根據(jù)局部數(shù)據(jù)域和臨時數(shù)據(jù)域的大小增加 top_sp的值,初始化它的局部數(shù)據(jù),并開始執(zhí)行過程體 臨時數(shù)據(jù)局部數(shù)據(jù) 返回值和參數(shù) 返回值和參數(shù) ? ? ? 控制鏈 和保存的機器狀態(tài) top_sp base_sp 臨時數(shù)據(jù)局部數(shù)據(jù) 控制鏈 和保存的機器狀態(tài) ? ? ? 全局棧式存儲分配 調用者 p和被調用者 q之間的任務劃分 被調用者 q的責任 調用者 p的責任 調用者 p的 活動記錄 被調用者 q的活動記錄 臨時數(shù)據(jù)局部數(shù)據(jù) 返回值和參數(shù) 返回值和參數(shù) ? ? ? 控制鏈 和保存的機器狀態(tài) top_sp base_sp 棧 增 長 方 向 臨時數(shù)據(jù)局部數(shù)據(jù) 控制鏈 和保存的機器狀態(tài) ? ? ? 全局棧式存儲分配 過程 p調用過程 q的返回序列 臨時數(shù)據(jù)局部數(shù)據(jù) 返回值和參數(shù) 返回值和參數(shù) ? ? ? 控制鏈 和保存的機器狀態(tài) top_sp base_sp 棧 增 長 方 向 臨時數(shù)據(jù)局部數(shù)據(jù) 控制鏈 和保存的機器狀態(tài) ? ? ? 全局棧式存儲分配 過程 p調用過程 q的返回序列 臨時數(shù)據(jù)局部數(shù)據(jù) 返回值 和參數(shù) 返回值和參數(shù) ? ? ? 控制鏈 和保存的機器狀態(tài) top_sp base_sp 棧 增 長 方 向 臨時數(shù)據(jù)局部數(shù)據(jù) 控制鏈 和保存的機器狀態(tài) ? ? ? (1) q把返回值置入鄰近 p的活動記錄的地方 參數(shù)個數(shù)可變場合難以確定存放返回值的位置,因此通常用寄存器傳遞返回值 全局棧式存儲分配 過程 p調用過程 q的返回序列 (2) q對應調用序列的步驟 (4),減小top_sp的值 返回值和參數(shù) top_sp base_sp 臨時數(shù)據(jù)局部數(shù)據(jù) 控制鏈 和保存的機器狀態(tài) ? ? ? 返回值和參數(shù) 控制鏈 和保存的機器狀態(tài) 全局棧式存儲分配 過程 p調用過程 q的返回序列 (3) q恢復寄存器 (包括 base_sp)和機器狀態(tài),返回 p 返回值和參數(shù) top_sp base_sp 臨時數(shù)據(jù)局部數(shù)據(jù) 控制鏈 和保存的機器狀態(tài) ? ? ? 返回值和參數(shù) 全局棧式存儲分配 過程 p調用過程 q的返回序列 返回值和參數(shù) top_sp base_sp 臨時數(shù)據(jù)局部數(shù)據(jù) 控制鏈 和保存的機器狀態(tài) ? ? ? (4) p根據(jù)參數(shù)個數(shù)與類型和返回值類型調整 top_sp, 然后取出返回值 全局棧式存儲分配 過程的參數(shù)個數(shù)可變的情況 臨時數(shù)據(jù)局部數(shù)據(jù) 參 數(shù) 參 數(shù) ? ? ? 控制鏈 和保存的機器狀態(tài) top_sp base_sp 棧 增 長 方 向 臨時數(shù)據(jù)局部數(shù)據(jù) 控制鏈 和保存的機器狀態(tài) ? ? ? (1) 函數(shù)返回值改成用寄存器傳遞 全局棧式存儲分配 過程的參數(shù)個數(shù)可變的情況 臨時數(shù)據(jù)局部數(shù)據(jù) 參數(shù) 1, …, 參數(shù) n 參數(shù) 1, …, 參數(shù) m ? ? ? 控制鏈 和保存的機器狀態(tài) top_sp base_sp 棧 增 長 方 向 臨時數(shù)據(jù)局部數(shù)據(jù) 控制鏈 和保存的機器狀態(tài) ? ? ? (2) 編譯器產生將實參表達式逆序計算并將結果進棧的代碼 自上而下依次是參數(shù) 1, …, 參數(shù)n 全局棧式存儲分配 過程的參數(shù)個數(shù)可變的情況 臨時數(shù)據(jù)局部數(shù)據(jù) 參數(shù) 1, …, 參數(shù) n 參數(shù) 1, …, 參數(shù) m ? ? ? 控制鏈 和保存的機器狀態(tài) top_sp base_sp 棧 增 長 方 向 臨時數(shù)據(jù)局部數(shù)據(jù) 控制鏈 和保存的機器狀態(tài) ? ? ? (3) 被調用函數(shù)能準確地知道第一個參數(shù)的位置 全局棧式存儲分配 過程的參數(shù)個數(shù)可變的情況 臨時數(shù)據(jù)局部數(shù)據(jù) 參數(shù) 1, …, 參數(shù) n 參數(shù) 1, …, 參數(shù) m ? ? ? 控制鏈 和保存的機器狀態(tài) top_sp base_sp 棧 增 長 方 向 臨時數(shù)據(jù)局部數(shù)據(jù) 控制鏈 和保存的機器狀態(tài) ? ? ? (4) 被調用函數(shù)根據(jù)第一個參數(shù)到棧中取第二、第三個參數(shù)等等 全局棧式存儲分配 過程的參數(shù)個數(shù)可變的情況 臨時數(shù)據(jù)局部數(shù)據(jù) 參數(shù) 1, …, 參數(shù) n 參數(shù) 1, …, 參數(shù) m ? ? ? 控制鏈 和保存的機器狀態(tài) top_sp base_sp 棧 增 長 方 向 臨時數(shù)據(jù)局部數(shù)據(jù) 控制鏈 和保存的機器狀態(tài) ? ? ? C語言的 printf函 數(shù)就是按此方式, 用 C語言編寫的 下面語句的輸出? printf(“%d, %d, %d\n”)。 {/? begin of B2 ?/ int a = 2。 對齊: char : 1, long : 4, double : 4 局部存儲分配 程序塊 ? 本身含有局部變量聲明的語句 ? 可以嵌套 ? 最接近的嵌套 作用域規(guī)則 ? 并列程序塊不會同時活躍 ? 并列程序塊的變量可以重疊分配 局部存儲分配 main() / ? 例 ?/ { /? begin of B0 ?/ int a = 0。 0 long i。 8 long i。 double f。編譯原理和技術 中國科學技術大學 計算機科學與技術學院 陳意云 第六章 運行時存儲空間的組織和管理 術語 – 過程的 活動 過程的一次執(zhí)行稱為過程的一次活動 – 活動記錄 過程的活動需要可執(zhí)行代碼和存放所需信息的存儲空間 ,后者稱為活動記錄 本章內容 ? 討論一個活動記錄中的數(shù)據(jù)布局 ? 程序執(zhí)行過程中,所有活動記錄的組織方式 第六章 運行時存儲空間的組織和管理 ? 影響存儲分配策略的語言特征 – 過程能否遞歸 – 當控制從過程的活動返回時 , 局部變量的值是否要保留 – 過程能否訪問非局部變量 – 過程調用的參數(shù)傳遞方式 – 過程能否作為參數(shù)被傳遞 – 過程能否作為結果值傳遞 – 存儲塊能否在程序控制下動態(tài)地分配 – 存儲塊是否必須顯式地釋放 局部存儲分配 過程 語言概念: 過程定義、 過程 調用、形式參數(shù)、實在參數(shù)、 活動的 生存期
點擊復制文檔內容
高考資料相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1