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

一、介绍

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

二、inline函数分析

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

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

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

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

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

三、总结

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

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

相关推荐
sycmancia3 分钟前
Qt——线程的生命期问题
开发语言·qt
影寂ldy4 分钟前
C# 多线程进阶知识点(线程优先级、多委托传参、线程锁、死锁)
开发语言·数据库·c#
国服第二切图仔7 分钟前
09-搜索工具Grep与Glob
开发语言·javascript·ecmascript
凤山老林17 分钟前
从“无法创建本地线程“异常说起:深度解析线程栈与JVM线程优化指南
java·开发语言·jvm
库克克17 分钟前
【C++】多态
开发语言·c++
夏沫琅琊26 分钟前
Jetpack Compose + 原生 PDF API 从零搭一个 Android 工具应用 (一)
android·pdf·kotlin
聚美智数1 小时前
常见疾病查询-疾病症状—疾病介绍-疾病大全-疾病治疗查询API接口介绍
android·java·数据库
观远数据1 小时前
经营闭环的最后一公里:从看见问题到解决问题之间还差什么
java·开发语言·数据库
Java面试题总结1 小时前
Go 语言大白话入门 6 - 判断与循环
开发语言·后端·golang
m0_617493941 小时前
Python OpenCV 孔洞检测与缺陷分析详解与实战
开发语言·python·opencv