我在这里向专家们提问...
有人对哪个编译器最适合iPhone应用程序做过性能测试吗?
因为我们可以选择以下几种:
- GCC 4.2
- LLVM GCC 4.2
- LLVM编译器1.5
我想知道这三个中哪一种提供的性能最好...
我自己做了一些快速测试,但没有发现什么大的区别?
你正在使用哪个编译器?
我在这里向专家们提问...
有人对哪个编译器最适合iPhone应用程序做过性能测试吗?
因为我们可以选择以下几种:
我想知道这三个中哪一种提供的性能最好...
我自己做了一些快速测试,但没有发现什么大的区别?
你正在使用哪个编译器?
我不知道iPhone的性能如何,但在其他基准测试中,Clang通常编译速度更快,但生成的代码比GCC慢。Clang的错误消息也比GCC更好。因此,在开发中最好使用Clang,并在最终生产构建时切换到GCC。如果选择这种方法,请确保拥有良好的QA周期或构建系统,也会构建和测试GCC构建,以便您在最后不会遇到任何令人讨厌的编译器相关问题。
Clang中的C++支持略逊于GCC(更多的C++代码已经经过了针对GCC的怪癖的测试和调整),因此,如果您需要使用大量的C++,GCC可能是更好的选择。
实际上,您需要选择最适合您需求的编译器。基准测试和其他人的结果可以为您提供考虑的指标,但每个程序都不同,因此最好的方法是在不同的编译器上对自己的程序进行基准测试,看哪个最适合您。
我使用的是LLVM GCC 4.2。
Clang在处理C++方面表现不佳,它仍然是一个正在开发中的工具包。它非常有前途,但目前(根据我的经验),它还不够稳定,无法用于生产。
苹果公司明显正在投资于Clang作为未来的编译器,但这不是一个简单的项目。不幸的是,这让我们中的很多人处于一个奇怪的境地,要么使用一个相对较旧的编译器,要么使用一个非常新的编译器(猜猜我需要多少年才能开始在我的代码库中使用c++0x的特性)。
自从可用以来(至少在测试期间),我一直在我的代码库中使用GCC前端与LLVM后端。它已经公开可用多年了,而且相当稳定。我发现LLVM pass生成的可执行文件比单独使用GCC更小、更快(尽管我更多地针对OS X而不是iOS)。老实说,我不能只用Clang编译足够的代码来推荐它(而且我有很多C++代码)。
我发现GCC+LLVM组合很可靠。如果您主要关注的是可靠性:先使用GCC,在开发过程中定期测试+LLVM,并在每个Clang版本发布时进行编译和测试,直到您满意为止。GCC+LLVM通常可用于今天的生产构建。
如果您关心速度,请从GCC+LLVM开始,并定期使用Clang进行测试(如果这对您来说是一个选择——对我来说不是——因为有太多的C++代码)。
关于Clang的解析/词法分析/生成:Clang旨在极度符合标准。他们做得很好,但有许多新功能或不存在的功能,这就是为什么我建议您要小心,特别是在处理C++方面。
我认为苹果已经明确了他们未来的首选编译器,所以......不要等太久才测试Clang。
使用clang 1.5的C++前端不是最好的选择,如果你必须处理任何C++代码(包括Objective-C++代码),我通常建议避免使用它。此外,当使用clang时,我遇到了一些弱连接问题,所以在我看来,如果你必须处理上述两种情况之一,它还没有准备好用于生产。
话虽如此,我没有注意到两者之间的性能有任何真正的影响,尽管clang的错误和警告远比gcc的有用得多。
值得思考。