c++中函数的调用方式

c++中函数的调用方式

编译器一般使用堆栈来实现函数调用。当一个函数被调用时,(进程内核对象为其在进程的地址空间的堆栈部分)分配一定的栈内存给函数使用,函数堆栈用于:

1.在进入函数前,保存“返回地址”和环境变量。返回地址是指该函数结束后,从进入该函数之前的哪个地址继续执行下去。

2.在进入函数之后,保存局部变量等。

在Win32下有一下4中调用:

1._cdecl:它是c/c++默认的调用方式。实参是以参数列表从右至左入栈,函数栈有调用方释放。主要用在哪些带有可变参数的函数上。

2._stdcall:它是WIN API的调用约定,需要显示指定。实参是以参数列表从右至左入栈,函数栈由被调用方自己释放。但若函数含有可变参数,那么即使显示指定了_stdcall,编译器也会自动把其改为_cdecl。

3._thiscall:它是类的非静态成员函数默认的调用约定,不能用在含有可变参数的函数上。实参是以参数列表从右至左入栈,函数栈由被调用方自己释放。(但是	类的非静态成员函数内部都含有一个this指针,该指针不是存在函数堆栈上,而是直接存放在寄存器上)。

4._fastcall:快速调用。它的实参不是放在函数堆栈上,而是直接存在寄存器上,所以不存在入栈出栈、函数堆栈释放。

需要注意:全局函数或类静态成员函数,若没有指定调用,约定默认是_cdecl。

猜你喜欢

转载自blog.csdn.net/m0_45388819/article/details/113817234