繁体   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