【问题标题】:Difference between LLVM, GCC 4.2 and Apple LLVM compiler 3.1LLVM、GCC 4.2 和 Apple LLVM 编译器 3.1 之间的区别
【发布时间】:2012-08-18 16:40:47
【问题描述】:

LLVM GCC 4.2 和 Apple LLVM 编译器 3.1 之间的主要区别是什么?

我对编译器相当陌生,因此感谢您提供任何帮助。此外,我对这两种编译器如何影响游戏性能特别感兴趣。

【问题讨论】:

    标签: ios compiler-construction llvm llvm-gcc


    【解决方案1】:

    区别在于技术和速度。

    当 Apple 开始从 GCC 的编译器和工具链过渡时,CLANG 还很年轻,并且存在缺陷,因此 LLVM 被构建为 GCC 的后端,以促进其最终替代。因此,代码进入并由 GCC 编译成某种中间形式,但被发送到 LLVM 以提供最终的机器代码和打包。

    最终,LLVM,尤其是 CLANG 已经足够成熟,可以彻底取代 GCC,这为编译提供了惊人的速度提升,并提高了机器代码输出的质量(尽管许多人认为 GCC 仍然以牺牲质量为代价来生成质量更好的代码速度)。

    但是为了解决您对游戏性能的担忧:虽然 CLANG 可能会提供“更好”的编译体验,但性能并不是编译器的工作。虽然优化和简化是编译过程的一部分,但人们仍然编写延迟游戏或产生浪费堆栈的无限循环这一事实表明 性能 是你的工作。编译器只能做这么多,剩下的就看你了。编译器的类型或供应商也不会成就或破坏您的游戏,也不会影响帧速率或可用性。您应该阅读有关 ARM 体系结构的低级优化。几篇关于 NEONinstruments 的文章比学习“为编译器优化”对你有好处。

    【讨论】:

    • 实际上是相反的——LLVM-GCC 使用 GCC 前端,但使用 LLVM 代码生成器。当 LLVM 项目开始时,它的目标是只提供后端代码生成器和其他编译器基础设施,而不是一个完整的 C 编译器。苹果后来启动了 clang 项目,以在 LLVM 基础架构之上构建一个完整的编译器。
    • 我不同意“性能不是编译器的工作”。性能是使编译器良好的重要组成部分。理想情况下,用户应该能够编写可读、可维护的代码,并依靠编译器来加快速度。 Clang 不是最成熟的编译器,与其他现代编译器相比,它经常表现出性能缺陷。有时它也比较好,但更多时候不是。从用户的角度来看,Clang 的强大之处在于高质量的诊断和一致性。从编译器开发人员的角度来看,Clang 非常易于使用并且移动非常迅速。
    • @Sven 你是绝对正确的,我已经编辑以反映这一点。 @barnes53:我只是说,因为虽然编译器实际上确实“优化”,但如果没有明确的指令,它们通常不会做任何内在的事情。一个完美的例子是 PPC 的旧 fsel(),它允许函数放弃带有浮点返回的分支。编译器不知道如何将分支折叠到 fsel,您必须告诉它这样做。另外,他问的是编译器,而不是调试器,所以我觉得讨论 LLDB 是不合适的。
    【解决方案2】:

    另一个区别:Clang 支持大部分 C++11。 GCC 4.2-Apple 将不支持 C++11。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多