C C 函式呼叫機制 3

2021-07-15 13:59:32 字數 676 閱讀 4175

c++函式呼叫機制

c++函式呼叫機制:主要通過堆疊呼叫來實現 棧是一種後進先出的資料結構 就像子彈夾一樣 先放進去的子彈在最底層  後放進去的在上層 在扣動扳機的時候 後面放進去的子彈先飛出去

c++的函式呼叫過程主要是要做好呼叫初始化和善後的處理過程 :

步驟:1.分配被呼叫函式所需的棧空間----**的執行需要相應空間

2.保護呼叫函式的執行狀態和返回位址---被調函式執行完以後需要回到原點 繼續執行

3.傳遞引數----注意是傳值引數,還是傳位址(指標和引用)

4.將控制權轉交被調函式

5.被調函式執行完畢,釋放棧空間,返回初始點

注意:函式的層層呼叫將會不斷消耗棧空間 過多的區域性變數 特別是陣列的定義 很有可能造成棧空間溢位  所以在編寫遞迴函式的時候一定要謹慎

幾種特殊函式:

1.遞迴函式:某函式間接或者直接呼叫自身 間接遞迴:指的是兩個函式相互呼叫 遞迴函式簡單易讀 但是對資源消耗很大 不提倡

2.內聯函式:主要是為了解決程式執行效率 通常是將某個短小且經常被呼叫的函式加上inline關鍵字 那麼每次碰到該函式的呼叫 都用一段相同**替換 省去堆疊呼叫

3.過載函式:引數列表不同的同名函式

3.const函式:返回乙個const資料

4.const成員函式:唯讀函式

c++函式壓棧順序:從右往左

c c 函式呼叫機制的理解

要想理解函式呼叫,首先必須理解函式。函式的值一般由返回值和傳遞的引數構成。所以當函式建立的時候,會有一段記憶體用來儲存函式的引數和返回值。在c中引數的傳遞只有值傳遞的形式,而在c 中則多了引用傳遞。值傳遞的過程,是指在被傳遞的函式中,新建了一塊記憶體用來儲存被傳遞的引數。而引用傳遞,則沒有新建一塊記...

C C 函式呼叫約定

c c 函式呼叫約定 關於c c 函式呼叫約定,大多數時候並不會影響程式邏輯,但遇到跨語言程式設計時,了解一下還是有好處的。vc 中預設呼叫是 cdecl 方式,windows api 使用 stdcall 呼叫方式,在dll 匯出函式中,為了跟windows api 保持一致,建議使用 stdca...

C C 函式呼叫方式

cdecl 是c declaration的縮寫 declaration,宣告 表示c語言預設的函式呼叫方法 所有引數從右到左依次入棧,這些引數由呼叫者清除,稱為手動清棧。被呼叫函式不會要求呼叫者傳遞多少引數,呼叫者傳遞過多或者過少的引數,甚至完全不同的引數都不會產生編譯階段的錯誤。stdcall 是...