C/C++函数调用的几种方式

这篇博客详细介绍了C/C++中常见的函数调用方式,包括stdcall、cdecl、fastcall、thiscall和naked call。讨论了参数压栈顺序、堆栈恢复责任以及函数名修饰规则,并提供了每种调用方式的示例。
摘要由CSDN通过智能技术生成

我们知道,调用函数时,计算机常用栈来存放函数执行需要的参数,由于栈的空间大小是有限的,在windows下栈是向低地址扩展的数据结构,是一块连续的内存区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,windows下栈的大小是2M(也有的说是1M),如果申请的空间超过栈的剩余空间时,将提示overflow。
在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。
在参数传递中,有两个重要的问题必须要明确说明:
1. 当参数个数多于一个时,按照什么顺序把参数压入堆栈;
2. 函数调用后,由谁来把堆栈恢复原状。
在高级语言中,就是通过函数的调用方式来说明这两个问题的。常见的调用方式有:
stdcall
cdecl
fastcall
thiscall
thiscall
naked call
下面就分别介绍这几种调用方式:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值