函数调用另一个词语表示叫作过程。一个过程调用包括将数据和控制从代码的一部分传递到另一部分。另外,它还必须在进入时为过程的局部变量分配空间,并在推出时释放这些空间。而数据传递,局部变量的分配和释放通过操纵程序栈来实现。

    栈帧也叫过程活动记录,是编译器用来实现过程函数调用的一种数据结构。

    下面的一段代码,在main函数中并没有调用使虚拟机重启的函数,但是虚拟机为什么会重启?

                     wKioL1dcGBCwhCUDAABO_E6JQVY563.jpg-wh_50

     这个原因就与栈帧有关,以下的图是对这个程序的解析

wKiom1dcHDmCQ6gIAAEYouHTt5A551.png-wh_50

     利用栈帧的知识,还可以不用b,但是可以改变b变量的值。

wKioL1dcJYDCaZq8AAAwPlaoCqo236.jpg-wh_50

以下是结果:

wKioL1dcJn_yon1eAAAN_Kx3QYo171.jpg