当前位置:网站首页>五、函数的调用过程
五、函数的调用过程
2022-08-03 12:15:00 【爱打羽毛球的程序员】
当一个函数的运行期间调用另一个函数时,在运行被调函数之前,系统需要完成三件事:
1.将所有的实参、返回地址(执行的函数语句的下一条语句的地址)传递给被调函数保存
2.为被调函数的局部变量(也包括形参)分配存储空间
3.将控制权转移到被调函数的入口
从被调函数返回主调函数之前,系统也要完成三件事:
1.保存被调函数的返回结果
2.释放被调函数所占的存储空间
3.依照被调函数保存的返回地址将控制权转移到调用函数
当有多个函数相互调用时,按照“后调用先返回”的原则,上述函数之间信息传递和控制转移必须借助”栈”来实现,即系统将整个程序运行时所需的数据空间安排在一个栈中,每当调用一个数时,就在顶分配一个存储区:进行压栈操作,每当一个函数退出时,就释放它的存储区,就行出栈操作,当前运行的函数永远都在栈顶位置。
A函数调用A函数和A函数调用在计算机看来是设有任何区别,只不过用我们日常的思维方式理解比较怪异而已!
边栏推荐
- 最牛逼的集群监控系统,它始终位列第一!
- Vs 快捷键---探索不一样的编程
- Matlab学习12-图像处理之图像增强
- Chapter 15 Source Code File REST API Introduction
- 【倒计时5天】探索音画质量提升背后的秘密,千元大礼等你来拿
- What knowledge points do you need to master to learn software testing?
- 一次内存泄露排查小结
- R语言ggplot2可视化:使用ggpubr包的ggline函数可视化折线图、设置add参数为mean_se和dotplot可视化不同水平均值的折线图并为折线图添加误差线(se标准误差)和点阵图
- 第3章 搭建短视频App基础架构
- 零信任架构分析【扬帆】
猜你喜欢
After completing the interview and clearance collection of Alibaba, I successfully won the 15th Offer this year
Go 语言快速入门指南: 介绍及安装
深度学习中数据到底要不要归一化?实测数据来说明!
【云原生 · Kubernetes】部署Kubernetes集群
长城简漫·暑期安全篇⑤ 这个强,不能逞
类型转换、常用运算符
子结点的数量
为什么越来越多的开发者放弃使用Postman,而选择Eolink?
4500字归纳总结,一名软件测试工程师需要掌握的技能大全
Matlab学习11-图像处理之图像变换
随机推荐
Matlab学习12-图像处理之图像增强
智能日报脚本
子结点的数量
漫谈缺陷管理的自动化实践方案
R语言使用zoo包中的rollapply函数以滚动的方式、窗口移动的方式将指定函数应用于时间序列、计算时间序列的滚动标准差(设置每个窗口不重叠)
899. 有序队列
Matlab学习11-图像处理之图像变换
R语言ggplot2可视化:使用ggpubr包的ggline函数可视化折线图、设置add参数为mean_se和dotplot可视化不同水平均值的折线图并为折线图添加误差线(se标准误差)和点阵图
【必读要点】Pod控制器Deployment更新、回退详解
Vs 快捷键---探索不一样的编程
Chapter 15 Source Code File REST API Introduction
LeetCode刷题笔记:105.从前序与中序遍历序列构造二叉树
[Verilog] HDLBits Problem Solution - Circuits/Sequential Logic/Latches and Flip-Flops
bash while loop and until loop
广州番禺:暑期防溺水,安全不放假
LyScript 实现对内存堆栈扫描
622. 设计循环队列
bash case用法
[Verilog] HDLBits Problem Solution - Verification: Writing Testbenches
hystrix 服务熔断和服务降级