1. 程式人生 > >函式呼叫棧——初探!

函式呼叫棧——初探!

好些日子以前,我接觸了Java,當時碰到一個問題——方法呼叫棧。當時不太明白,直到前段時間學了《資料結構》中的 棧 才略微的明白了一些,先將這個曾經不懂的地方總結一下。

首先,必須對 棧 這種結構的特性有所瞭解。

棧的特性——後進先出。

在程式中,呼叫函式和被呼叫函式之間的連結及資訊交換需要通過棧這種結構來進行。

當一個函式在執行期間呼叫另一個函式時,在執行被呼叫函式之前,系統需要先完成3件事:

(1) 將所有的實參,返回地址等資訊傳遞給被呼叫函式儲存;

(2) 為被調動函式的區域性變數分配儲存區;

(3) 將控制轉移到被調函式入口;

而從被調函式返回呼叫函式之前,系統也完成3件事:

(1) 儲存被調函式的計算結果;

(2) 釋放被調函式的資料區;

(3) 依照被調函式儲存的返回地址將控制轉移到呼叫函式。

當有多個函式構成巢狀呼叫時(如:遞迴呼叫),按照“後呼叫先返回”的原則,函式之間的資訊傳遞和控制轉移可以用 “棧” 這玩意兒來實現。即:

系統將整個程式執行時所需的資料空間安排在一個棧中,每當呼叫一個函式時,就為它在棧頂分配一個儲存區,每當從一個函式退出時,就釋放它的儲存區,所以 當前正執行的函式在資料區必須在棧頂。

、https://blog.csdn.net/watermusicyes/article/details/7478723