C++函数参数压栈顺序

C语言函数参数压栈顺序是从右向左,C++的压栈顺序不同情况下却不一样。跟调用约定和编译器有关。

VC6:

    调用约定              堆栈清除    参数传递 
    __cdecl                   调用者      从右到左,通过堆栈传递 
    __stdcall                 函数体         从右到左,通过堆栈传递 
    __fastcall                函数体         从右到左,优先使用寄存器(ECX,EDX),然后使用堆栈 
    thiscall                  函数体         this指针默认通过ECX传递,其他参数从右到左入栈

C++Builder6:

    调用约定               堆栈清除    参数传递 
    __fastcall                   函数体      从左到右,优先使用寄存器(EAX,EDX,ECX),然后使用堆栈 (兼容Delphi的register) 
    (register和__fastcall等同) 
    __pascal                     函数体      从左到右,通过堆栈传递 
    __cdecl                     调用者      从右到左,通过堆栈传递(和C/C++默认调用约定兼容) 
    __stdcall                     函数体     从右到左,通过堆栈传递(和VC中的__stdcall兼容) 
    __msfastcall                 函数体      从右到左,优先使用寄存器(ECX,EDX),然后使用堆栈(兼容VC的__fastcall)

posted on 2017-09-15 19:28  xuelei56  阅读(750)  评论(0编辑  收藏  举报

导航