- 当一个函数在运行期间调用另一个函数时, 在运行被调用函数之前,系统要完成三件事:
1. 将所有的实际参数, 返回地址等信息传递给被调函数保存
2. 为被调用函数的局部变量(也包括形参)分配存储空间
3. 将控制转移到被调函数的入口
- 从被调函数返回主调函数之前, 系统也在完成三件事:
1. 保存被调函数的返回结果
2. 释放被调函数所占的存储空间
3. 依照被调函数保存的返回地址将控制转移到调用函数
- 当有多个函数相互调用时, 按照“后调用先返回”的原则, 函数之间信息传递各控制转移必须借助“栈”来实现,
即系统将整个程序运行时所需的数据空间安排在一个栈中, 每个当调用一个函数时, 就在栈顶分配一个存储区,
进行压栈操作, 每当一个函数退出时, 就释放它的存储区, 就进行出栈操作, 当前运行的函数永远都在栈顶
知识扩展:
递归: 函数调用自己本身。
递归和循环比较:
递归:
易理解, 速度慢, 占用内存大
循环:
不易理解, 速度快, 占用内存小
转载于:https://my.oschina.net/jianbooo/blog/30399