LLVM 浅见

LLVM

不多哔哔
代码写完首先会经过编译器来进行编译 阶段

  1. Frontend 就是编译器先会通过 词法分析 语法分析 语义分析 生成中间代码(语言不同而选择不同的编译器)Clang 是基于LLVM 支持C、C++ 、OC的编译器前端部分
  2. Optimizer 进行优化 比如查找更快 体积更小 (不论什么语言什么平台 都一样 LLVM IR 有点像政府 不论你什么民族都归它管)
  3. Backend 根据平台生成对应的机器码(会根据不同平台而不同)

那直入主题 OC的编译过程
clang -ccc-print-phases main.m
在这里插入图片描述

  1. 找到文件
  2. 宏定义 import都给换掉
  3. 编译成中间代码
  4. 交给LLVM 后端生成机器码
  5. 目标代码
  6. 链接动态库
  7. 编译成适合架构的代码

看看预编译的过程
在这里插入图片描述
clang -E main.m 编译结果 宏已经被替换了
在这里插入图片描述

词法分析

clange -fmodules -E -Xclang -dump-tokens main.m
代码全部拆解分成一个一个的(哪一行的哪一个字符都有标记)
在这里插入图片描述

语法分析

clang -fmodules -fsyntax-only -Xclang -ast-dump main.m
生成语法树
在这里插入图片描述
中间代码长什么样
生成 .ll文件 clang -S -emit-llvm main.m
在这里插入图片描述
全局 @开头 比如函数名
局部 %开头 比如变量
alloc 栈空间分配内存
i32 32bit 4个字节的意思
align 内存对齐
store 写入数据
load 读取数据

生成 .bc文件 clang -c -emit-llvm main.m 二进制文件 看不懂

脑瓜疼歇了改日再继续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值