深入理解計算機系統——第三章—3.7過程

3.7 過程

過程是軟件中的一種很重要的抽象。它提供了一種封裝代碼的方式,用一組指定的參數和一個可選的返回值實現了某種功能。

3.7.1 運行時棧

C語言使用棧數據結構提供的後進先出的內存管理原則。
這裏寫圖片描述

3.7.2 轉移控制

將控制從函數P轉移到函數Q只需要簡單地把程序計數器(PC)設置爲Q的代碼的起始位置。
這裏寫圖片描述
call 指令有一個目標,即指明被調用過程起始的指令地址。
示例:
這裏寫圖片描述
這裏寫圖片描述

3.7.3 數據傳送

過程調用還可能包括把數據作爲參數傳遞,而從過程返回還有可能包括返回一個值。
這裏寫圖片描述
超出6個參數傳遞的例子:
這裏寫圖片描述

3.7.4 棧上的局部存儲

局部數據必須存放在內存中,常見的情況有:
1) 寄存器不足夠存放所有的本地數據;
2) 對一個局部變量使用地址運算符’&‘ ,因此必須能夠爲它產生一個地址;
3) 某些局部變量是數據或結構,因此必須能夠通過數據或結構引用被訪問到。
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

3.7.5 寄存器中的局部存儲空間

寄存器是唯一被所有過程共享的資源。
據慣例,寄存器 %rbx %rbp%r12~%r15 被劃分爲***被調用者保存寄存器***。所有其他的寄存器,除了棧指針 %rsp, 都分類爲***調用者保存寄存器***。
示例:
這裏寫圖片描述

3.7.6 遞歸過程

示例:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章