棧 呼叫約定 函式預設值 inline函式

2021-09-08 13:55:46 字數 1259 閱讀 8859

.data存放已初始化但初始化不為0的資料

.bss存放未初始化或初始化為0的資料

強弱符號

強符號:已初始化的全域性變數

弱符號:未初始化的全域性變數

規則:1、兩強符號——重定義錯誤

2、一強一弱,選強符號

3、兩弱符號,針對編譯器不同選擇不同

函式堆疊呼叫:

move   移值  lea  移位址

四個暫存器:eax  ebx  ecx  edx

ebp 棧底指標暫存器   esp  棧頂指標暫存器   pc  下一行指令暫存器

棧:函式活動所需要的空間 ; 棧幀:乙個函式所需要的空間

1、被呼叫函式用完成後退回到呼叫方棧幀的原因

進入被呼叫棧後,壓入了呼叫方ebp的值

2、被呼叫函式呼叫完成後怎麼知道沿下一行指令繼續執行

3、形參有無開闢記憶體,誰開闢的

形參有開闢記憶體,呼叫方開闢且清理的

呼叫約定:1、函式的符號生成   2、入棧順序  3、形參的開闢和清理方式

c的標準呼叫約定 __cdecl     呼叫方開闢呼叫方清理

windows的標準呼叫約定__stdcall  呼叫方開闢  被呼叫方清理

快速呼叫約定:__fastcall  前兩個實參 呼叫不開闢形參記憶體,第三個引數起__stdcall呼叫

c++類成員方法的呼叫約定:__thiscall

函式的預設值:

1、自右向左依次賦值,自左向右匹配

2、預設值不能重複賦值

3、一般給在宣告上

函式的過載三要素:

1、同名

2、形參不同:(1)形參型別不同(2)形參的個數不同(3)形參的順序不同

3、同作用域

inline函式:在函式的呼叫點直接展開**

inline函式和普通函式的區別:

普通函式有開棧和清棧 ,inline函式無清棧開棧

inline函式佔據空間龐大,以空間換時間

執行開銷《呼叫開銷  可以用inline函式

執行開銷》呼叫開銷  不建議用inline函式

inline函式和巨集的區別:

inline:編譯     有型別檢查和安全檢查

巨集:預編譯     無型別檢查與安全檢查

inline函式的注意事項:

1、inline函式一般寫在標頭檔案下

2、inline函式只在relese版本下生效

3、給編譯器的乙個建議,是否展開由編譯器決定

4、inline是基於實現的不是基於宣告的

C 筆記 函式堆疊呼叫 呼叫約定 形參預設值

1.通過加斷點 除錯 視窗 轉到反彙編可以檢視函式的堆疊呼叫過程 includeint sum int lhs,int rhs int main 知識點補充 1.底層對於變數沒有使用變數名進行區分而是使用棧底指標偏移量進行區分。2.等號是右結合性,先運算等號的右邊。3.對小於8位元組的返回值是交給e...

lua 函式 預設值 定義函式引數的預設值

如果你想要命名引數和預設值,如php或python,你可以使用表構造函式呼叫你的函式 myfunction 函式本身可以有這樣的簽名 function myfunction t setmetatable t,local a,c t 1 or t.a,t 2 or t.b,t 3 or t.c fun...

函式(引數,預設值)

js定義函式引數沒有非常嚴格的要求,可以有也可以沒有,在呼叫的時候也是,引數可以有可以沒有,也可以和定義時的引數個數不一致 沒有給count傳入引數,預設為10 也可以直接在引數中給count賦值 但是特別注意的是不能給count傳入0,因為0與undefined都是false,因此count傳入的...