• 函数调用规范


    [摘至高质量程序设计指南]
    函数调用规范
    与函数栈使用密切相关的就是函数调用规范,即调用约定(Calling Convertion)。函数调用规范决定了函数调用的实参压栈、退栈及栈释放的方式,以及函数名改编(Name_Mangling)的方案,也即命名的规范(Naming Convention)。
    Windows环境下常用的调用规范有:
    (1)_cdecl:这是C++/C函数的默认调用规范,参数从右向左依次传递并压入堆栈,由调用函数负责堆栈的清退,因此这种方式利于传递个数可变的参数给被调用函数。(一般像printf这类参数可变的函数,最左边的参数都是确定的,从右向左压栈的时候,判断到参数是类型是确定的同类型说明参数传递完毕
    (2)_stdcall:这个是WinAPI函数使用的调用规范。参数从右向左依次传递并压入堆栈,由被调用函数负责堆栈的清退。该规范生成的函数代码比_cdecl更小,但当参数可变的时候,会转化为_cdecl规范。
    (3)_thiscall:是C++非静态成员函数的默认调用规范,不能使用个数可变的参数。当调用非静态成员函数的时候,this指针直接保存在ECX寄存器中而非压入堆栈中。
    (4)_fastcall:该规范所修饰的函数的实参将被直接传递到CPU寄存器中而不是内存堆栈中。该规范不能用于成员函数。
  • 相关阅读:
    HDU 6071
    HDU 6073
    HDU 2124 Repair the Wall(贪心)
    HDU 2037 今年暑假不AC(贪心)
    HDU 1257 最少拦截系统(贪心)
    HDU 1789 Doing Homework again(贪心)
    HDU 1009 FatMouse' Trade(贪心)
    HDU 2216 Game III(BFS)
    HDU 1509 Windows Message Queue(队列)
    HDU 1081 To The Max(动态规划)
  • 原文地址:https://www.cnblogs.com/scnutiger/p/1576647.html
Copyright © 2020-2023  润新知