在此,主要为大家介绍一下函数调用的过程,以及函数调用与栈帧的关系。以下为在visual c++ 6.0 下实现的函数调用,具体程序如下:

函数的调用过程,栈帧的创建和销毁

进行反汇编,如下图:

函数的调用过程,栈帧的创建和销毁函数的调用过程,栈帧的创建和销毁

该过程为形成main函数的栈帧过程,利用call指令指向下一条指令的地址,然后跳转到add函数的地方。如下图;

函数的调用过程,栈帧的创建和销毁

进入add函数,如下图:

函数的调用过程,栈帧的创建和销毁函数的调用过程,栈帧的创建和销毁

该过程是在main函数栈帧的基础上,再形成add函数的栈帧,接下来就是add函数的返回过程,如下图;

函数的调用过程,栈帧的创建和销毁

该过程释放了add函数所用的存储的栈帧空间,运行完add函数,跳转到main函数的返回代码处,如下图:

函数的调用过程,栈帧的创建和销毁

该过程释放了main函数的栈帧空间,返回a+b的结果。

  综上,函数的调用就是在一个栈空间内不断形成各个函数的栈帧,当结果计算完成后,再不断释放这些函数形成栈帧的空间。从而可以使栈空间可以循环使用。希望对大家的栈帧学习有所帮助。

相关文章:

  • 2021-05-08
  • 2021-05-18
  • 2022-01-13
猜你喜欢
  • 2021-10-07
  • 2021-05-28
  • 2021-07-11
  • 2021-07-07
  • 2021-06-21
  • 2021-05-30
  • 2021-05-03
相关资源
相似解决方案