读书人

C++基础之5:函数调用机制与调用约定

发布时间: 2013-10-08 16:46:23 作者: rapoo

C++基础之五:函数调用机制与调用约定
1.示例

栈的作用和功能这里就不再叙述了。

先看一个最简单的函数调用例子:



3.函数返回

当被调用函数结束后,进行返回时,系统进行的动作刚好与函数调用时相反,内存模型如下图:

(1)释放栈内局部变量空间

(2)释放栈内传参空间

(3)退栈,得到返回地址,程序跳转调用处等待

(4)退栈,得到调用前运行状态,恢复调用前运行状态

(5)释放该调用函数栈空间

C++基础之5:函数调用机制与调用约定

也正是因为这样,所以局部变量在函数调用结束后就被销毁了。栈是内存中的一部分空间,因此也是有限资源,如果频繁的调用函数而不让已调用的函数返回,那么栈就会被不断开辟,最终导致栈溢出(stack overflow),程序崩溃,所以在处理一些递归函数上需要特别注意结束条件,以及上一篇所写的拷贝构造函数的传参必须使用引用也是这个原因。


4.函数调用约定

函数调用时参数的传递过程中还有两个需要注意的问题:

1.多个参数的入栈顺序?

2.谁来清理调用堆栈?

在高级语言中,是通过函数调用约定来说明这两个问题的。C++采用的函数调用约定就是__stdcall。__stdcall包含两个意思,第一是按照C风格传递参数即参数从右自左压入堆栈,函数内部正好从左自右读出参数,第二是函数执行清除堆栈,即调用函数是堆栈中压入参数时占用了位置,这些位置将由调用函数负责清空。

读书人网 >C++

热点推荐