当前位置:网站首页>五、函数的调用过程
五、函数的调用过程
2022-08-03 12:15:00 【爱打羽毛球的程序员】
当一个函数的运行期间调用另一个函数时,在运行被调函数之前,系统需要完成三件事:
1.将所有的实参、返回地址(执行的函数语句的下一条语句的地址)传递给被调函数保存
2.为被调函数的局部变量(也包括形参)分配存储空间
3.将控制权转移到被调函数的入口
从被调函数返回主调函数之前,系统也要完成三件事:
1.保存被调函数的返回结果
2.释放被调函数所占的存储空间
3.依照被调函数保存的返回地址将控制权转移到调用函数
当有多个函数相互调用时,按照“后调用先返回”的原则,上述函数之间信息传递和控制转移必须借助”栈”来实现,即系统将整个程序运行时所需的数据空间安排在一个栈中,每当调用一个数时,就在顶分配一个存储区:进行压栈操作,每当一个函数退出时,就释放它的存储区,就行出栈操作,当前运行的函数永远都在栈顶位置。
A函数调用A函数和A函数调用在计算机看来是设有任何区别,只不过用我们日常的思维方式理解比较怪异而已!
边栏推荐
- 距LiveVideoStackCon 2022 上海站开幕还有3天!
- LeetCode-1796. 字符串中第二大的数字
- "Digital Economy Panorama White Paper" Financial Digital User Chapter released!
- [Verilog] HDLBits Problem Solution - Circuits/Sequential Logic/Latches and Flip-Flops
- 如图,想批量读取mysql,批量处理,有哪个地方参数需要改变呢?
- 899. 有序队列
- 零信任的基本概念【新航海】
- Feature Engineering Study Notes
- 数据库系统原理与应用教程(073)—— MySQL 练习题:操作题 131-140(十七):综合练习
- AMS simulation
猜你喜欢
随机推荐
面试突击71:GET 和 POST 有什么区别?
【云原生 · Kubernetes】部署Kubernetes集群
LeetCode-142. 环形链表 II
bash for循环
从零开始Blazor Server(6)--基于策略的权限验证
数据库系统原理与应用教程(075)—— MySQL 练习题:操作题 151-159(十九):综合练习
Explain the virtual machine in detail!JD.com produced HotSpot VM source code analysis notes (with complete source code)
特征工程学习笔记
什么是Weex
LeetCode-1161. 最大层内元素和
nacos应用
How can I get a city's year-round weather data for free?Precipitation, temperature, humidity, solar radiation, etc.
From scratch Blazor Server (6) - authentication based on strategy
子结点的数量
长城简漫·暑期安全篇⑤ 这个强,不能逞
字节最爱问的智力题,你会几道?
R语言使用ggpubr包的ggtexttable函数可视化表格数据(直接绘制表格图或者在图像中添加表格数据)、使用tab_add_vline函数自定义表格中竖线(垂直线)的线条类型以及线条粗细
【Verilog】HDLBits题解——Circuits/Sequential Logic/Latches and Flip-Flops
进程内存
面试官:SOA 和微服务的区别?这回终于搞清楚了!









