小码哥iOS学习笔记第十六天: llvm中间代码

1,023 阅读1分钟

一、代码准备

  • Person继承自NSObject, 添加-test的声明, 并添加消息转发代码

  • main函数中使用Person实例对象调用-test, 执行程序

二、查看cpp文件

  • 可以通过终端执行命令查看cpp文件
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc Person.m

三、通过Xcode查看汇编代码

  • 可以通过Xcode查看汇编代码

四、查看llvm中间代码

  • 我们编写OC代码, 在底层实际上转化成了llvm汇编代码, 然后在转成汇编和机器语言
  • 我们可以使用终端命令获取llvm中间代码
clang -emit-llvm -S Person.m

语法简介: 具体可以参考官方文档:llvm.org/docs/LangRe…

@ - 全局变量
% - 局部变量
alloca - 在当前执行的函数的堆栈帧中分配内存,当该函数返回到其调用者时,将自动释放内存
i32 - 32位4字节的整数
align - 对齐
load - 读出,store 写入
icmp - 两个整数值比较,返回布尔值
br - 选择分支,根据条件来转向label,不根据条件跳转的话类似 goto
label - 代码标签
call - 调用函数