问题
- 为什么苹果生产包会自动选择
Release
环境?
1.认识slowpath 和 fastpath
objc4源码中有很多slowpath
和fastpath
函数,他们都是为编译优化
而生。
宏定义如下:
#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]
模式。
在Fastest,Smallest[-OS]
模式下,会发现汇编页面
展示的代码已精简很多
答案
Release
环境下,系统自动选择Fastest,Smallest[-OS]
模式,完成编译器优化。
下一节: OC底层原理五:剖析isa (卸妆后的对象)
网友评论