以後技術方面的筆記也都記錄在這個博客了.
今天做編譯原理作業時遇到這個問題,就整理了下。
參數的壓棧、退棧方式是由函數調用規范決定的
大部分的函數調用參數都從右向左壓入棧的,因為我們讀參時是從左向右的。
Windows常用的調用規范:
調用規范
描述
_cdecl
C/C++程序的默認調用規范。參數從右到左傳遞,由調用函數負責將參數從堆棧中移走,這利於傳遞個數可變的參數
_stdcall
這個WindowAPI函數使用的調用規范。參數從右到左傳遞,由被調用函數負責將參數從堆棧中移走。由該規范產生的代碼比_cdecl更小,但當函數有可變參數個數時,仍會使用__cdecl規范。WINAPI、CALLBACK以及APIENTRY宏都被定義為__stdcall規范
thiscall
(非關鍵字)
C++成員函數的默認調用規范,不使用個數可變的參數。除了this指針是保存在ECX寄存器裡,而不是保存在堆棧裡外,其他的都和__stdcall相同。注意:COM成員函數使用__stdcall規范