簡體   English   中英

iPhone GCC / LLVM GCC還是LLVM?

[英]iPhone GCC / LLVM GCC or LLVM?

我在這里問專家......

是否有人對哪些編譯器最適合iPhone應用程序進行了一些性能測試?

既然我們可以選擇:

  • GCC 4.2
  • LLVM GCC 4.2
  • LLVM編譯器1.5

我想知道3個中哪個提供最佳性能......

我自己做了一些快速測試,但沒有發現太大的區別?

你使用的是哪個編譯器?

如果您觀看WWDC 2010會話視頻 300(聯盟的開發人員工具狀態),您將看到Apple報告使用LLVM編譯器構建的應用程序相對於GCC的性能顯着提高(在某些情況下速度提高了60%)。 通過將Clang解析器與LLVM編譯器一起使用,可以進行其他改進。 觀看會話312 - “LLVM編譯器中的新功能”了解更多信息,以及WWDC 2009上的LLVM會話(如果有的話)。

在我的一個應用程序中,我在非正式基准測試中看到了從GCC到LLVM 1.5的20%加速,但這不是一個嚴格的測試,所以請考慮只有軼事證據。

我的建議是使用Clang + LLVM(LLVM編譯器1.5),如果你可以更快的構建時間,更高性能的應用程序,以及更好的編譯器錯誤。 如果您使用C ++代碼或Clang解析器目前無法處理的其他內容,請使用LLVM GCC仍然可以在編譯的應用程序中獲得性能優勢。 只有在出於某種原因失敗時才轉到GCC。 這是一個簡單的開關,可以在您的構建設置中點擊,以便在最終應用程序中免費獲得少量額外性能。

隨附Xcode 4的LLVM Compiler 2.0完全支持C ++,並承諾對編譯應用程序進行額外的優化,以及更多的編譯時加速。 Xcode 4甚至使用Clang作為IDE中的語法高亮/代碼校正引擎。 很明顯,Apple正朝着編譯器前進的方向發展。

我不知道iPhone的性能,但在其他基准測試中 ,Clang通常編譯速度更快,但產生的代碼比GCC慢。 Clang還有比GCC更好的錯誤消息。 因此,最好在開發中使用Clang,並切換到GCC進行最終生產構建。 如果您選擇這樣的方法,請確保您有一個良好的QA周期,或者構建系統也將構建和測試GCC構建,因此您最終不會得到任何令人討厭的編譯器相關的驚喜。

Clang中的C ++支持有點落后於GCC(並且更多的C ++代碼已經針對GCC的怪癖進行了測試和調整,而不是Clang的),所以如果你需要使用大量的C ++,GCC可能是更好的選擇。

實際上,您需要根據需要選擇最佳編譯器。 基准測試和其他人的結果可以告訴您要考慮的內容,但每個程序都是不同的,因此最好的方法是在不同的編譯器上對您自己的程序進行基准測試,看看哪個最適合您。

LLVM GCC 4.2就是我使用的。

Clang不能很好地處理C ++,而且它正在進行中。 這是一個非常有前途的工具包,但它目前還不夠穩定(根據我的經驗)。

Apple肯定會投資Clang作為他們未來的編譯器,但它不是一個簡單的項目。 不幸的是,這讓我們很多人處於一個陌生的地方,使用一個相對較舊的編譯器和/或一個非常非常新的編譯器(猜測在我開始在我的代碼庫中使用c ++ 0x的功能之前會花多少年)。

我已經使用帶有LLVM后端的GCC前端和我的代碼庫,因為它可用(至少在測試期間)。 它已經公開多年,並且相當穩定。 我發現與單獨的GCC相比,LLVM傳遞確實產生了更小,更快的可執行文件(盡管我做的工作比OS更多地針對OS X)。 坦率地說,我不能單獨使用Clang來編譯足夠的代碼來推薦它(另外,我有很多C ++)。

我發現GCC + LLVM組合可靠。 如果可靠性是您最關心的問題:從GCC開始,定期在開發中測試+ LLVM,並在每個Clang版本中定期編譯和測試Clang,直到您對它感到滿意為止。 GCC + LLVM通常可用於今天的生產版本。

如果速度是您的關注點,請從GCC + LLVM開始,並定期使用Clang進行測試(如果這是一個選項 - 它不適合我 - 太多c ++)。

關於Clang的解析/ lexing / generation:Clang的目標是極其符合標准。 他們做得很好,但有許多新功能或不存在的功能,這就是為什么我建議你保持謹慎,尤其是使用C ++。

我相信Apple的未來首選編譯器是明顯的......所以不要等太長時間來測試Clang。

我想在Xcode中介紹這個驚人的文章編譯器選項 - GCC或LLVM?

在此輸入圖像描述

你不會想念一個單詞,特別是哪個部分可供選擇?

使用clang 1.5的C ++前端並不是最好的,如果你必須處理任何C ++代碼(這包括Objective-C ++代碼),我通常建議不要使用它。 另外,在使用clang時我遇到了一些弱連接問題,所以對我來說,如果你不得不處理上述兩種情況中的任何一種,它還沒有准備好生產。

也就是說,我沒有注意到兩者之間對性能有任何實際影響,盡管clang的錯誤和警告比gcc更有用。

值得深思。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM