Android kotlin内联函数(inline)的详解与原理

一、介绍

在kotlin中,有一种函数叫内联函数,这种函数标识符是inline,但是好多人对这个函数的理解只停留在八股文中,内容函数的用法和普通函数没有区别,但是在编译原理上是有,对程序的性能有一定的影响。

二、inline函数分析

我们知道kotlin是一种插件语言,并非c或者c++还是Java这种官方语言,那么在设计的时候必然会参考其他语言在设计。inline内联函数的起源来到了c++中。

在c++中,内联函数的标记也是通过inline,但是在kotlin的八股文中,内联函数最多被介绍到的把代码插入到调用函数的模块中。为什么要用这种方式?

在程序编译与解释器中,程序都是从顶向下编译的。执行也是的,如果你的程序不在一个模块中,调用的话,cpu需要做额外的工作,这个时候就涉及到一个物理寻快的问题,如果这两块地址不在一段内存中,那么在寻址的时候就需要花费时间,这样在程序执行的性能上有一定的影响。

但是通过内联函数标识,可以将这部分代码插入到调用的模块中,这样避免寻址,但是,在编译的时候,目标文件会变大。

所以内联函数可以提高程序的执行效率,也带来了一定的空间浪费。这就是采用了空间换时间。也不是通过inline标记的函数就一定会被插入到调用函数体中,要不要被插入是由编译器决定的。

三、总结

内联函数很好的配合了程序的解耦工作。解耦就是将复杂的程序或者共用的模块抽取出来,这样也牺牲了一部分性能,考虑到寻址这个问题。但是在kotlin中又通过inline方式,解决了性能问题,同样也带来了空间问题。这就是程序中经典的空间换时间,这个只针对如今内存条向对便宜的时候可以忽略,计算机起步的时候,空间换时间是一件不可想象的事。

注意:内联函数不是百分百会被插入到调用的地方,这是c++的概念,将代码放到同一段内存地址中是由编译器决定的。kotlin的内联也遵守c++的设计原则

相关推荐
道不尽世间的沧桑1 小时前
第17篇:网络请求与Axios集成
开发语言·前端·javascript
xvch1 小时前
Kotlin 2.1.0 入门教程(二十五)类型擦除
android·kotlin
久绊A1 小时前
Python 基本语法的详细解释
开发语言·windows·python
软件黑马王子4 小时前
C#初级教程(4)——流程控制:从基础到实践
开发语言·c#
闲猫4 小时前
go orm GORM
开发语言·后端·golang
李白同学6 小时前
【C语言】结构体内存对齐问题
c语言·开发语言
黑子哥呢?7 小时前
安装Bash completion解决tab不能补全问题
开发语言·bash
青龙小码农7 小时前
yum报错:bash: /usr/bin/yum: /usr/bin/python: 坏的解释器:没有那个文件或目录
开发语言·python·bash·liunx
大数据追光猿7 小时前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法
彳卸风8 小时前
Unable to parse timestamp value: “20250220135445“, expected format is
开发语言