函数调用栈——初探!

时间:2021-10-06 03:38:51

好些日子以前,我接触了Java,当时碰到一个问题——方法调用栈。当时不太明白,直到前段时间学了《数据结构》中的 栈 才略微的明白了一些,先将这个曾经不懂的地方总结一下。

首先,必须对 栈 这种结构的特性有所了解。

栈的特性——后进先出。

在程序中,调用函数和被调用函数之间的链接及信息交换需要通过栈这种结构来进行。

当一个函数在运行期间调用另一个函数时,在运行被调用函数之前,系统需要先完成3件事:

(1) 将所有的实参,返回地址等信息传递给被调用函数保存;

(2) 为被调动函数的局部变量分配存储区;

(3) 将控制转移到被调函数入口;

而从被调函数返回调用函数之前,系统也完成3件事:

(1) 保存被调函数的计算结果;

(2) 释放被调函数的数据区;

(3) 依照被调函数保存的返回地址将控制转移到调用函数。

当有多个函数构成嵌套调用时(如:递归调用),按照“后调用先返回”的原则,函数之间的信息传递和控制转移可以用 “栈” 这玩意儿来实现。即:

系统将整个程序运行时所需的数据空间安排在一个栈中,每当调用一个函数时,就为它在栈顶分配一个存储区,每当从一个函数退出时,就释放它的存储区,所以 当前正运行的函数在数据区必须在栈顶。




、https://blog.csdn.net/watermusicyes/article/details/7478723