2017-01-25 33 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