什麼是啟用記錄?


啟用記錄是一種資料結構,在呼叫過程/函式時被啟用/建立,其中包含以下關於函式的資料。

C語言中的啟用記錄包含:

  • 實際引數
  • 引數個數
  • 返回地址
  • 返回值
  • 舊棧指標 (SP)
  • 函式或過程中的區域性資料


這裡,**舊SP**儲存呼叫此過程並導致生成此啟用記錄的過程的啟用記錄的棧指標值,即它是呼叫方啟用記錄的指標。

在棧分配方案中,當過程A呼叫過程B時,B的啟用記錄將被壓入A的啟用記錄之上。當過程B呼叫過程C時,C的啟用記錄將被壓入B的啟用記錄之上,如圖所示:

棧分配方案需要兩個指標:

  • **棧頂指標 (top)** - 指向棧頂。top指向最頂層啟用記錄的頂部。在圖中,top指標將指向C啟用記錄的頂部。
  • **棧指標 (SP)** - 指向當前活動過程的啟用記錄。


在圖中,過程C是當前活動過程。因此,指標SP將指向C的啟用記錄。

過程C啟用記錄上的指標**SP**包含舊SP的值。這裡舊SP指的是前一個棧指標的值,即前一個啟用記錄B。因此,C啟用記錄中的舊SP包含B啟用記錄中SP的值。

全域性資料空間是固定的,並在棧的一角靜態分配。

**儲存的機器狀態** - 儲存過程被呼叫之前的機器狀態資訊。此資訊包括程式計數器和機器暫存器的值,這些值必須在控制權從過程返回時恢復。

**可選訪問連結** - 定義儲存在其他啟用記錄中的非區域性資料。

**可選控制連結** - 指向呼叫方的啟用記錄。

**實際引數** - 呼叫過程用來向被呼叫過程提供引數。

**返回值** - 被呼叫過程用來向呼叫過程返回值。上述每個欄位的大小在呼叫過程時確定。幾乎所有欄位的大小都可以在編譯時確定。

更新於:2021年11月8日

12K+ 瀏覽量

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.