iOS启动优化 —— LLVM编译流程 & Clang插件开发

1. LLVM

1.1 LLVM概述

LLVM是架构编译器的框架系统,以C++编写而成,用于优化任意程序语言编写的程序的编译时间(compile-time)链接时间(link-time)运行时间(run-time)以及空闲时间(idle-time)。对开发者保持开放,并兼容已有脚本。目前LLVM已经被苹果IOS开发工具,Xilinx Vivado, Facebook,Google等各大公司采用。

1.2 传统编译器设计

源码 Source Code + 前端 Frontend + 优化器 Optimizer + 后端 Backend(代码生成器 CodeGenerator)+ 机器码 Machine Code,如下图所示
在这里插入图片描述

  • 前端Frontend:负责解析源代码,它会进行:词法分析语法分析语义分析,检查源代码是否存在错误。然后构建针对语言的抽象语法树AST:Abstract Syntax Tree。LLVM 的前端还会生成中间代码(intermediate representation,简称IR)

  • 优化器 Optimizer:优化器负责进行各种优化,改善代码的运行时间,例如消除冗余计算等;

  • 后端 Backend(代码生成器 Code Generator):将代码映射到目标指令集,生成机器代码,并且进行机器代码相关的代码优化;

1.3 ios的编译器架构

OC、C、C++使用的编译器前端是ClangSwift是swift,后端都是LLVM,如下图所示
在这里插入图片描述

1.4 LLVM的设计

LLVM设计的最重要方面是,使用通用的代码表示形式(IR),它是用来在编译器中表示代码的形式,所有LLVM可以为任何编程语言独立编写前端,并且可以为任意硬件架构独立编写后端,做到了前后端分离如下所示
在这里插入图片描述
传统的编译器,前端,优化器和后端是连在一起的,是一个项目。但是在llvm中,前端和后端分开了,两者中间有一个通用的中间层,也就是IR。前端解析源代码,然后词法分析语法分析语义分析AST等工作完成之后,生成IR输出给优化器,优化器负责优化IR代码,然后后端接受IR代码后根据需要适配的设备生成X86、ARM64等。所以,当出现一个新设备,只需要研发一个新设备的后端。出现一个高级语言,就研发高级语言的前端。这样就能支持所有的语言和设备。

1.5 Clang

clangLLVM项目中的一个子项目,它是基于LLVM架构图的轻量级编译器,诞生之初是为了替代GCC,提供更快的编译速度,它是负责C、C++、OC语言的编译器,属于整个LLVM架构中的 编译器前端,对于开发者来说,研究Clang可以给我们带来很多好处

2. 编译流程

可以通过以下命令打印源码的编译阶段:

clang -ccc-print-phases main.m

这里新建一个后通过命令打印源码的编译阶段:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值