函数(方法)的调用机制|学习笔记

简介: 快速学习函数(方法)的调用机制。

开发者学堂课程【Scala 核心编程-基础函数(方法)的调用机制】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/609/detail/8930


函数(方法)的调用机制

 

内容介绍

一、案例说明

二、函数调用机制流程分析

 

一、案例说明

现在要探讨的话题就是函数的基本运行原理,那么,函数的调用机制如果用。比较通俗易懂的方式。

image.png

就是如图程序员调用方法,然后返回一个结果。如果放在一个内存来分析的话,就是如下这个案例。

为了让大家更好的理解函数调用机制,看1个案例,并画出示意图,这个很重要,比如 getSum 计算两个数的和,并返回结果。

新建 FunYuanli 文件,写入代码:

object Test01 {

def main(args: Array[String]): Unit = { I

val n1=1

val n2=3

val res = sum(n1, n2)

println("res=" + res)

}

def sum(n1: Int, n2: Int): Int = {

return n1 + n2

}

}

整个代码就是传入1和3然后进行返回结果。源代码的入口是从主函数开始的,那么在内存中,是怎样运行函数或者方法的呢?

 

二、函数调用机制流程分析

函数调用机制示意图

image.png

如图,首先在内存中有一大块空间叫做栈,栈是一种数据结构。栈是一种特别重要的数据结构,可以实现很多功能比如说 a+b1+2等最底层都是栈在工作,进行的是压栈出栈的操作。当函数进入到 main 过后,在栈中会开辟一个空间为 main 主栈在实际工作中是没有这个名字的,而是一个地址进行表示。就是栈里面是一个独立的空间,其中有 n1[1],n2[3],当它执行到这个地方后,紧接着会调用一句话res = sum(n1, n2),sum 传入了 n1,n2,栈中是没有这个代码的,只是不停的在出栈进栈,这里只是为了方便观看。而sum会在底层开辟一个新的独立的栈,调用后会保留现场,就是为了将来执行后可以返回,留下的一个地址。main 栈和 sum 栈都在大的栈内存空间中,只是为了方便区分化为两个。跳到 sum 语句后,println 语句会被中断,跳到 def 语句执行,在 sum 栈中,又会出现一个n1[1],n2[3],虽然名字相同,但是两个栈中 n1,n2是独立的,最后 n 1+n2的结果为4最后结果就会返回给 sum,因为 sun 保留了现场,所以代码会从 sum 栈中回到 main 栈,返回结果为4,而一旦返回结果后,sum 栈就已经没有用了,那么在最底层是如何把sum栈拿掉的呢?其实最早在 main 栈有一个指针,当还没有 sum 栈的时候,指针是指向 main 栈的,当调用sum栈产生的时候,栈指针则指向 sun 栈顶,又当 return 返回过后,栈指针就指向 main 栈顶,而 sum 栈就不再引用了。等到 res 返回后就继续执行下面的代码,就是执行 println 语句,最后输出结果为4。后面学习递归时这个机制尤其重要。

相关文章
|
10月前
|
人工智能 自然语言处理 IDE
6 款 AI 工具,助力写出更优质代码
6 款 AI 工具,助力写出更优质代码
1815 3
6 款 AI 工具,助力写出更优质代码
|
Java Linux
Linux(服务器) 装JDK
Linux(服务器) 装JDK
431 1
|
机器学习/深度学习 人工智能 自然语言处理
《C++与AMD ROCm:人工智能计算的强力引擎》
AMD ROCm平台是一个开放的、基于GPU的高性能计算平台,为人工智能计算提供卓越加速能力。结合C++这一高效编程语言,ROCm平台在深度学习、计算机视觉和自然语言处理等领域展现出巨大潜力。C++对底层硬件的精细控制与庞大的生态系统,使其在ROCm平台上实现更低延迟和更高吞吐量,适用于实时性要求高的任务。尽管面临编程复杂性和兼容性挑战,通过持续优化和技术支持,ROCm与C++的组合将在更多领域推动人工智能技术的实际应用,助力构建智能世界。
329 18
|
9月前
|
人工智能 自然语言处理 IDE
通义灵码 Visual Studio 终于支持模型切换
如需使用灵码模型选择,需要开发者将灵码 IDE 插件更新到最新版,前往下载安装包安装
746 0
通义灵码 Visual Studio 终于支持模型切换
|
人工智能 自然语言处理
通义灵码在Visual Studio2022中的实践
本文介绍了如何在Visual Studio 2022中安装和使用通义灵码。首先,在Visual Studio 2022中安装通义灵码插件,然后按照步骤完成安装和登录。最后,通过实操演示了通义灵码的三大功能:行级/函数级实时续写、自然语言生成代码和研发领域自由问答。希望读者能从中受益。
5859 4
|
存储 算法 C语言
通义灵码在考研C语言和数据结构中的应用实践 1-5
通义灵码在考研C语言和数据结构中的应用实践,体验通义灵码的强大思路。《趣学C语言和数据结构100例》精选了五个经典问题及其解决方案,包括求最大公约数和最小公倍数、统计字符类型、求特殊数列和、计算阶乘和双阶乘、以及求斐波那契数列的前20项和。通过这些实例,帮助读者掌握C语言的基本语法和常用算法,提升编程能力。
328 4
|
安全 编译器 程序员
全面解析C++11新特性:现代编程的新起点(上)
全面解析C++11新特性:现代编程的新起点
全面解析C++11新特性:现代编程的新起点(上)
|
存储 Go C语言
Python 的整数是怎么实现的?这篇文章告诉你答案
Python 的整数是怎么实现的?这篇文章告诉你答案
305 7
|
人工智能 监控 数据挖掘
CAP 快速部署项目体验评测
本文介绍了使用CAP(云应用平台)的体验,涵盖模板选择与部署、性能测试与监控、二次开发与调试等方面。作者选择了RAG模板并成功部署,通过性能测试验证了应用的稳定性,进行了二次开发并提出改进建议。CAP在模板库丰富度、产品引导与功能满足度等方面表现良好,但在实时数据分析和定制化方面仍有提升空间。总体而言,CAP是一个强大的云应用开发平台,适合快速构建和管理应用。
208 19