09.slowpath和fastpath

在日常阅读OC源码的过程中经常会遇到这两个宏定义。它是什么意思呢?

//x很可能为真, fastpath 可以简称为 真值判断
#define fastpath(x) (__builtin_expect(bool(x), 1)) 
//x很可能为假,slowpath 可以简称为 假值判断
#define slowpath(x) (__builtin_expect(bool(x), 0))

其中的 __builtin_expect 指令是由 gcc 引入的

  • 目的:编译器可以对代码进行优化,以减少指令跳转带来的性能下降。即性能优化

  • 作用:允许程序员将最有可能执行的分支告诉编译器。

  • 指令的写法为:__builtin_expect(EXP, N) 。表示 EXP==N的概率很大。

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

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

  • 在日常的开发中,也可以通过设置来优化编译器,达到性能优化的目的,设置的路径为:Build Setting --> Optimization Level --> Debug --> 将None 改为 fastest 或者 smallest

Last updated