android底层运行原理,IOS与安卓底层运行原理

IOS

IOS的编译过程分为前段和后端两个部分

前端

预处理(Pre-process):他的主要工作就是将宏替换,删除注释展开头文件,生成.i文件。

词法分析(Lexical Analysis):将代码切成一个个 token,比如大小括号,等于号还有字符串等。是计算机科学中将字符序列转换为标记序列的过程。

语法分析(Semantic Analysis):验证语法是否正确,然后将所有节点组成抽象语法树 AST 。Clang 中 Parser 和 Sema 配合完成

静态分析(Static Analysis):使用它来表示用于分析源代码以便自动发现错误。

中间代码生成(Code Generation):开始IR中间代码的生成了,CodeGen 会负责将语法树自顶向下遍历逐步翻译成 LLVM IR,IR 是编译过程的前端的输出后端的输入。

后端

优化(Optimize):LLVM 会去做些优化工作,在 Xcode 的编译设置里也可以设置优化级别-01,-03,-0s,还可以写些自己的 Pass,官方有比较完整的 Pass 教程: Writing an LLVM Pass — LLVM 5 documentation 。如果开启了 bitcode 苹果会做进一步的优化,有新的后端架构还是可以用这份优化过的 bitcode 去生成。

生成目标文件(Assemble):苹果平台生成Mach-O

链接(Link):生成 Executable 可执行文件。

安卓

安卓的编译过程,最开始是编译成.class,用虚拟机执行

之后经历了JIT AOT 等阶段,但是都有对应的不足

目前使用了一种折中的方法

安卓最开始是一种解释型语言,边解释边执行,目前使用折中方式

IOS比较纯粹,编译成机器语言执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值