最近从网上买了一个iOS的系列教程,感觉现在开发到了瓶颈期,抱着活到老学到老的心态,主要也是想提高下自己,就决定毫不犹豫的买了这个教程。写这篇博客,主要目的就是想已笔记的形式记录每期的知识点,以便查看
2019-03-21 链接器
作用
将符号(函数和变量)绑定到地址上
相关名词
- 机器码:硬件可以直接执行的一组二进制指令,不同的计算机指令是不一样的
- 解释器:程序在运行时将代码文件处理成目标文件
- 编译器:将程序首先经过编译后就可以直接被硬件识别
- 编译器执行效率高,调试周期长;解释器执行效率低,调试方便灵活
- LLVM:iOS开发使用的编译器
当我们点击Run时,LLVM都干了什么?
- 代码预处理,将宏插入到对应的位置
- 将代码进行词法分析和语法分析,生成AST(抽象语法树,结构更清晰更简洁,便于遍历查找)
- AST会生成IR(更接近机器语言,与平台无关,可以生成对应平台的可执行文件,对于iOS开发就是Mach-O文件)
编译时链接器做了什么
将操作的数据绑定到存储地址及引用的函数符号也绑定到对应的函数地址,如果不绑定就需要在写代码时给每个指令指定需要操作的内存地址
dyld
- 先执行 Mach-O 文件,根据 Mach-O 文件里 undefined 的符号加载应的动态库,系统会设置一个共享缓存来解决加载的递归依赖问题;
- 加载后,将 undefined 的符号绑定到动态库里对应的地址上
- 最后再处理 +load 方法,main 函数返回后运行static terminator
加载动态库方法
dlopen,dlsym
2019-03-26 OC代码静态分析工具
分析工具
- oclint
- clang静态分析器
- infer(推荐使用)
作用
检查语法错误,性能检测,优化代码建议,内存泄漏
总结
这三款工具都是基于clang(c,c++,oc编译器)开发的,提供了底层的核心功能
LLVM知识补充
swift编译器结构分析