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

一、介绍

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

二、inline函数分析

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

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

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

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

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

三、总结

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

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

相关推荐
张风捷特烈11 小时前
Flutter 伪3D绘制#03 | 轴测投影原理分析
android·flutter·canvas
我不会编程55512 小时前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
李少兄12 小时前
Unirest:优雅的Java HTTP客户端库
java·开发语言·http
无名之逆13 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
似水এ᭄往昔13 小时前
【C语言】文件操作
c语言·开发语言
啊喜拔牙13 小时前
1. hadoop 集群的常用命令
java·大数据·开发语言·python·scala
xixixin_13 小时前
为什么 js 对象中引用本地图片需要写 require 或 import
开发语言·前端·javascript
W_chuanqi13 小时前
安装 Microsoft Visual C++ Build Tools
开发语言·c++·microsoft
anlogic13 小时前
Java基础 4.3
java·开发语言
omegayy14 小时前
Unity 2022.3.x部分Android设备播放视频黑屏问题
android·unity·视频播放·黑屏