1. 程式人生 > >C語言-第35課 - 函數調用行為

C語言-第35課 - 函數調用行為

align cdecl 維護 pan 機制 開發 協議 當前 編譯

第35課 - 函數調用行為

  1. 活動記錄

活動記錄是函數調用時用於記錄一系列相關信息的記錄,包括:

l 臨時變量域:用來存放臨時變量的值,如k++的中間結果(生成臨時變量,將k的值賦值給臨時變量,k=k+1--temp

l 局部變量域:用來存放函數本次執行中的局部變量。

l 機械狀態域:用來保存調用函數之前有關機器狀態的信息,包括各種寄存器的當前值和返回值等。

l 實參數域:用於存放函數的實參信息。

  1. 參數入棧

既然函數參數的計算次序是依賴編譯器實現的,那麽函數參數的入棧次序是如何確定的呢?由調用約定來描述。我們自己來約定。

  1. 調用約定

1)當一個函數被調用時,參數會傳遞給被調用的函數,而返回值會被返回給調用的函數。函數的調用約定就是描述參數是怎麽傳遞到棧空間的,以及棧空間由誰來維護。

2)參數傳遞順序

從右到左一次入棧:_stdcall, _cdecl, _thiscall

從左到右依次入棧:_pascal, _fastcall

l pf為正。

(3)調用堆棧清理

調用者清除棧。

被調用函數返回後清除棧。

註:在調用動態函數庫的時候,我們就得規定調用約定,使雙方一致,否則在調用的過程中會出錯。調用約定的用法,就是在指定的函數前面加上對應的符號就好,如:_pascal f()

小結:

(1) 函數調用是C語言的核心機制。

(2) 活動記錄中保存了函數調用以及返回所需要的一切信息。

(3) 調用約定是調用者和被調用者之間的調用協議,常用語不同開發者編寫的庫函數之間。

C語言-第35課 - 函數調用行為