洋仔的博客 洋仔的博客
首页
  • 个人心法总结

    • 价值心法
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • iOS基础知识
  • 前端
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 投资体系
  • 毛选
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

洋仔

奋斗的小青年
首页
  • 个人心法总结

    • 价值心法
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • iOS基础知识
  • 前端
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 投资体系
  • 毛选
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 技术文档

  • GitHub技巧

  • Nodejs

  • 博客搭建

  • iOS基础知识

    • iOS底层相关

    • Runloop系列

    • Runtime系列

    • 内存管理系列

    • Block系列

    • 线程系列

    • KVC跟KVO系列以及通知中心

    • UI系列

    • 离屏渲染系列

    • 组件化系列跟架构

    • OC跟webview交互系列

    • 持久化系列

    • APP编译系列

      • APP签名机制
      • 总结面试题有感
        • 1.Xcode编译器简单介绍(GCC和Clang+LLVM)
        • 总结:编译流程解释:
      • Mac-O
      • 二进制插桩
    • APP性能优化系列

    • cocoapods系列

    • swift系列

    • Git系列

    • 网络相关

    • 三方库系列

    • 系统原理

    • 总结系列

    • 算法系列

    • 数据结构系列

  • 前端

  • 技术
  • iOS基础知识
  • APP编译系列
洋仔
2023-08-19
目录

总结面试题有感

# 1.Xcode编译器简单介绍(GCC和Clang+LLVM)

前端(Frontend)--优化器(Optimizer)--后端(Backend)

  • 其中前端负责分析源代码,可以检查语法级错误,并构建针对该语言的抽象语法树(AST)

  • 抽象语法树可以进一步转换为优化,最终转为新的表示方式, 然后再交给让优化器和后端处理

  • 最终由后端生成可执行的机器码

理论上一个语言对应一个编译器,这样就引入了中间优化器,可以接受多种语言,然后输出对应的机器语言,这样前端只负责输入,后端负责输出即可,新增一种语言,就在中间优化层增加逻辑即可。

点击查看

前端

编译器前端的任务是进行:语法分析,语义分析,生成中间代码(intermediate representation )。在这个过程中,会进行类型检查,如果发现错误或者警告会标注出来在哪一行。

后端(优化中间层和后端)

编译器后端会进行机器无关的代码优化,生成机器语言,并且进行机器相关的代码优化。iOS的编译过程,后端的处理如下

LVVM优化器会进行BitCode的生成,链接期优化等等。

LLVM机器码生成器会针对不同的架构,比如arm64等生成不同的机器码。

这里先明白一个概念,Xcode编译过程中,从Cocoapods开始到对应的每个m文件,都会进行各自的编译过程,抛开其他编译发生的事情,每个编译流程大致如下

# 总结:编译流程解释:

编译流程解释: 0 - 输入文件:找到源文件。

1 - 预处理阶段:删除注释、替换宏定义、导入头文件。

2 - 编译阶段:词法分析、语法分析、语义分析、检查源代码是否正确、生成IR代码 .ll 。

3 - 编译后端:LLVM会通过一个个Pass去优化每个Pass做的事,最终生成汇编代码 .s 。

4 - 执行汇编程序:生成目标文件 .o 。

5 - 静态链接阶段:链接需要的动态库和静态库,所有.o黏合最后生成可执行文件。

6 - 根据不同的cpu架构去生成对应的可执行文件 exec 。

编辑 (opens new window)
上次更新: 2024/10/23, 23:26:17
APP签名机制
Mac-O

← APP签名机制 Mac-O→

最近更新
01
数组
10-25
02
数组双指针系列之对撞指针
10-25
03
数组双指针系列之快慢指针
10-25
更多文章>
Theme by Vdoing | Copyright © 2019-2024 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式