【C++】函數調用約定、函數返回值的返回方式

C++函數調用約定有4種:

    1._cdecl C標準調用約定,也是默認調用約定

    2._stdcall Windows下的標準調用約定

    3._fastcall 快速調用約定

    4._thiscall 類成員方法的調用約定

_cdecl調用約定生成的函數符號:?函數名@@YAHHH@Z

    YA代表_cdecl函數約定,YG代表_stdcall函數約定,YI代表_fastcall函數約定。

    函數調用約定後的第一個參數代表函數返回值類型,第二個參數代表第一個形參類型,第三個參數代表第二個形參類型。其中H代表int,_N代表bool,N代表double。

    最後的@Z代表有形參。

函數調用約定約定了什麼?

    1.函數符號的生成;

    2.實參的入棧順序(以上四種調用約定均是從右向左入棧);

    3.形參的開闢和清理方式

      _cdecl 調用方開闢內存,調用方清理

      _stdcall 調用方開闢內存,被調用方清理

      _fastcall 最多使用2個寄存器帶入實參,第3個參數起,調用方開闢內存,被調用方清理

 

函數返回值的返回方式

    1.返回值如果>0個字節並且<=4個字節則由eax寄存器帶回;

    2.返回值如果>4個字節並且<=8個字節則由2個寄存器eax、edx帶回;

    3.返回值如果>8個字節則由臨時量帶回。

    寄存器:eax、ebx、ecx、edx

    ebp:棧底指針寄存器

    esp:棧頂指針寄存器

    PC:下一行指令寄存器

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章