• Java基础知识篇之函数调用基本原理


    函数调用的基本原理

    在介绍递归函数的时候,我们看到了一个系统错误:java.lang.StackOverflowError,理解这个错误,需要理解函数调用的实现机制。下面,我们先来了解一个重要的概念:栈,然后再通过一些例子来仔细分析函数调用的过程。

    栈的概念

    我们之前谈过程序执行的基本原理:CPU有一个指令指示器,指向下一条要执行的指令,要么顺序执行,要么进行跳转(条件跳转或无条件跳转)。

    基本上,这依然是成立的,程序从main函数开始顺序执行,函数调用可以看作一个无条件跳转,跳转到对应函数的指令处开始执行,碰到return语句或者函数结尾的时候,再执行一次无条件跳转,跳转回调用方,执行调用函数后的下一条指令。

    但这里面有几个问题。

    1)参数如何传递?

    2)函数如何知道返回到什么地方?

    在if/else、for中,跳转的地址都是确定的,但函数自己并不知道会被谁调用,而且可能会被很多地方调用,它并不能提前知道执行结束后返回哪里。

    3)函数结果如何传给调用方?

    解决思路是使用内存来存放这些数据,函数调用方和函数自己就如何存放和使用这些数据达成一个一致的协议或约定。这个约定在各种计算机系统中都是类似的,存放这些数据的内存有一个相同的名字,叫栈 。

    栈是一块内存,但它的使用有特别的约定,一般是先进后出,类似于一个桶&#x

  • 相关阅读:
    服务端代码
    Python入门教程 |Python 错误和异常
    FPGA_状态机工作原理
    Unity 脚本单例
    环境扫描/透射电子显微镜气体样品架的真空压力和微小流量控制解决方案
    as设置java home
    基于黄金正弦算法优化概率神经网络PNN的分类预测 - 附代码
    为图像添加mask
    考研计组chap3存储系统
    【Python-Spark(大规模数据)】
  • 原文地址:https://blog.csdn.net/Abcd6578787_/article/details/127091599