zoukankan      html  css  js  c++  java
  • 调用惯例Calling Convention (或者说:调用约定)

    调用惯例影响执行效率,参数的传递方式以及栈清除的方式。

     
    调用惯例  参数传递顺序 谁负责清除参数 参数是否使用暂存器
    register 从左到右           被调用者
    pascal 从左到右 被调用者
    cdecl 从右到左 调用者
    stdcall 从右到左 被调用者
    safecall 从右到左 被调用者
    fastcall  

    头两个DWORD(4字节)类型或者占更少

    字节的参数被放入寄存器,其它剩下的参数

    按从右至左的顺序压入栈

     被调用者  否
    WINAPI

    在WINDEF.H中定义:#define  WINAPI  _stdcall

       

    Dekphi   默认的调用惯例是:__register

    win32API  默认的调用惯例是:__pascal、__stdcall、__safecall

    c语言  默认的调用惯例:__cdecl  __stdcall  __fastcall

    2019/04/15引用百度百科:

    函数原型中__stdcall,因为它以双下划线打头,所以它是一个特定于编译器的扩展,说到底也就是微软的实现。任何支持开发基于Win32的程序都必须支持这个扩展或其等价物。以__stdcall标识的函数使用了标准调用约定,为什么叫标准约定呢,因为所有的Win32 API(除了个别接受可变参数的除外)都使用它。标准调用约定的函数在它们返回到调用者之前,都会从堆栈中移除掉参数,这也是Pascal的标准约定。但在C/C++中,调用约定是调用者负责清理堆栈,而不是被调用函数;为强制函数使用C/C++调用约定,可使用__cdecl。另外,可变参数函数也使用C/C++调用约定。

  • 相关阅读:
    APP支付,后台支付宝生成预支付设置超时时间timeout_express无效,使用time_expire代替
    一些学习资料
    自连接
    模型成员
    模型查询
    模板
    管理站点
    视图
    设计模型
    搭建开发环境
  • 原文地址:https://www.cnblogs.com/azbane/p/7541678.html
Copyright © 2011-2022 走看看