在此,主要为大家介绍一下函数调用的过程,以及函数调用与栈帧的关系。以下为在visual c++ 6.0 下实现的函数调用,具体程序如下:
进行反汇编,如下图:
该过程为形成main函数的栈帧过程,利用call指令指向下一条指令的地址,然后跳转到add函数的地方。如下图;
进入add函数,如下图:
该过程是在main函数栈帧的基础上,再形成add函数的栈帧,接下来就是add函数的返回过程,如下图;
该过程释放了add函数所用的存储的栈帧空间,运行完add函数,跳转到main函数的返回代码处,如下图:
该过程释放了main函数的栈帧空间,返回a+b的结果。
综上,函数的调用就是在一个栈空间内不断形成各个函数的栈帧,当结果计算完成后,再不断释放这些函数形成栈帧的空间。从而可以使栈空间可以循环使用。希望对大家的栈帧学习有所帮助。