C 函式呼叫機制

2021-08-07 12:14:12 字數 725 閱讀 4488

區域性變數占用的記憶體是在程式執行過程中「動態」地建立和釋放的。這種「動態」是通過棧由系統自動管理進行的。當任何乙個函式呼叫發生時,系統都要作以下工作:

(1)建立棧空間;

(3)為被調函式中的區域性變數分配空間,完成引數傳遞;

(4)執行被調函式函式體;

(5)釋放被調函式中區域性變數占用的棧空間;

(7)繼續主調函式後續語句。

函式呼叫過程中的記憶體使用:通過下面例子來看函式呼叫時記憶體的變化情況。

關於執行函式指令c++ primer plus中這樣解釋:

執行到函式呼叫指令時,程式將在函式呼叫後立即儲存該指令的記憶體位址,並將函式引數複製到堆疊(為此保留的記憶體塊),跳到標記函式起點的記憶體單元,執行函式**(也許還需要將返回值放入到暫存器中),然後跳回到位址被儲存的指令處(這與閱讀文章時停下來看腳注,並在閱讀完腳注後返回到以前閱讀的地方類似)。來回跳躍並記錄跳躍位置意味著以前使用函式時,需要一定的開銷。

C 靜態構造函式呼叫機制

若乙個類中有靜態建構函式,在首次例項化該類或任何的靜態成員被引用時,net自動呼叫靜態建構函式來初始化該類。注意是 首次 即繼續例項化該類時,不會呼叫該類的靜態建構函式。1 例項化時呼叫靜態建構函式 靜態建構函式 main主函式在類staticconstructortest之中 1.程式被載入時,首...

C 基礎之五 函式呼叫機制與呼叫約定

棧的作用和功能這裡就不再敘述了。先看乙個最簡單的函式呼叫例子 cpp view plain copy include stdafx.h int call int a,int b void tmain int call int a,int b main函式中呼叫call函式,並傳入2個引數a,b。呼叫...

函式呼叫的底層機制

int fun int a,int b int main 之後,最關鍵的是在專案設定裡關閉優化功能。也就是把project setting c c optimizations選為disabled。編譯器的優化在分析底層實現時大多數情況不太受歡迎。按鍵盤上的f10鍵,進入單步除錯模式 step ove...