2017-01-25 18 views
2

Apple LLVM 8.0 - Code Generation部分下的Unroll Loops优化设置似乎在最新的XCode,8.2.1,甚至是Release配置中默认关闭。有什么好的理由呢?我认为循环展开是最基本的优化之一。为什么循环在XCode中默认关闭?

回答

1

它似乎被禁用,以避免增加生成的代码的大小。

Tuning for Performance and Responsiveness

表6-1编译器优化选项

更快

编译器执行不需要时空权衡几乎所有支持的优化。 编译器不使用此选项执行循环展开或函数内联。此选项增加编译时间和生成的代码的性能。

最快

编译器以试图改善所生成的代码的速度执行所有优化。该选项可以增加生成的代码的大小,因为编译器会执行强力的函数内联。 通常不推荐使用此选项。

+2

有道理。虽然我并不完全确定由XCode运行的clang实际上并没有执行展开,即使当“展开循环”处于关闭状态时,由于根据实际的铿锵声标志,“更快”('-O2')包括循环展开,请参阅http://stackoverflow.com/questions/15548023/clang-optimization-levels/15548189#15548189 – Danra