美文网首页iOS 进阶之路
OC底层原理四: 编译器优化

OC底层原理四: 编译器优化

作者: markhetao | 来源:发表于2020-09-11 13:07 被阅读0次

OC底层原理 学习大纲

问题

  • 为什么苹果生产包会自动选择 Release环境?

1.认识slowpath 和 fastpath

objc4源码中有很多slowpathfastpath函数,他们都是为编译优化而生。

image.png

宏定义如下:

#define fastpath(x) (__builtin_expect(bool(x), 1))
#define slowpath(x) (__builtin_expect(bool(x), 0))

2. 认识 __builtin_expect(EXP, N)

__builtin_expect是gcc引入的

  • 作用: 允许程序员最有可能执行的分支告诉编译器。
  • 函数__builtin_expect(EXP, N) 表示 EXP==N的概率很大

3. slowpath 和 fastpath

  • fastpath
    定义__builtin_expect((x),1),表示 x 的值为的可能性更大;即执行 if 里面语句的机会更大
  • slowpath
    定义的__builtin_expect((x),0),表示 x 的值为的可能性更大,即执行 else 里面语句的机会更大

4. 如何配置

  • target ->BuildSettings: 搜索:optimization
    我们发现Optimization Level中,Release环境下,已自动选择Fastest,Smallest[-OS]。 这就是我们问题的答案。

  • 在开发过程中,想要提高编译速度,可将Debug环境也选中Fastest,Smallest[-OS]模式。

image

Fastest,Smallest[-OS]模式下,会发现汇编页面展示的代码已精简很多

答案

Release环境下,系统自动选择Fastest,Smallest[-OS]模式,完成编译器优化。

下一节: OC底层原理五:剖析isa (卸妆后的对象)

相关文章

网友评论

    本文标题:OC底层原理四: 编译器优化

    本文链接:https://www.haomeiwen.com/subject/fxwvektx.html