这是我参与更文挑战的第2天,活动详情查看: 更文挑战前端
编译连接自己是一个很大的体系内容,咱们后续再开文章专门详细说明;后端
咱们都知道OC是一门编译型语言,Xcode内置的编译器已经从GCC
转换为LLVM
,LLVM
又分为前端Clang
和后端LLVM
,为了提升编译后的机器码执行效率,编译器会在编译过程当中把一些编译期就能够肯定的代码进行优化,从而提升执行效率;markdown
例如app
int a = 5;
int b = 3;
int c = a + b;
复制代码
这几行代码在通过优化后可能就会合并成一句代码了,从汇编层面能够很清楚的看到未优化前指令如图所示, ide
当设置优化后的指令如图所示函数
能够看到:oop
add
运算后再写回x0寄存器进行使用;iOS 端的编译优化设置Build Settings > Optimization Level
,设置项的解释以下post
Specifies the degree to which the generated code is optimized for speed and binary size.性能
None[-O0]: Do not optimize. With this setting, the compiler's goal is to reduce the cost of compilation and to make debugging produce the expected results. Statements are independent: if you stop the program with a breakpoint between statements, you can then assign a new value to any variable or change the program counter to any other statement in the function and get exactly the results you would expect from the source code. Fast[-O1]: Optimizing compilation takes somewhat more time, and a lot more memory for a large function. With this setting, the compiler tries to reduce code size and execution time, without performing any optimizations that take a great deal of compilation time. In Apple's compiler, strict aliasing, block reordering, and inter-block scheduling are disabled by default when optimizing. Faster[-O2]: The compiler performs nearly all supported optimizations that do not involve a space-speed tradeoff. With this setting, the compiler does not perform loop unrolling or function inlining, or register renaming. As compared to the 'Fast' setting, this setting increases both compilation time and the performance of the generated code. Fastest[-O3]: Turns on all optimizations specified by the 'Faster' setting and also turns on function inlining and register renaming options. This setting may result in a larger binary. Fastest, Smallest[-Os]: Optimize for size. This setting enables all 'Faster' optimizations that do not typically increase code size. It also performs further optimizations designed to reduce code size. Fastest, Aggressive Optimizations[-Ofast]: This setting enables 'Fastest' but also enables aggressive optimizations that may break strict standards compliance but should work well on well-behaved code.优化
一般Debug模式默认为None[-O0],Release模式默认为Fastest, Smallest[-Os],在实际的项目中,能够根据项目的状况设置优化级别。
须要注意的是,任何的优化都是基于时间和空间层面的考量,速度的提高每每伴随着空间开销的增大,反之亦然;