.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傳入的...