美文网首页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