LLVM,GCC 4.2和Apple LLVM编译器3.1之间的区别

Sun*_*day 10 compiler-construction llvm llvm-gcc ios

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

我对编译器很新,所以任何帮助都表示赞赏.此外,我对这两个编译器如何影响游戏性能特别感兴趣.

Cod*_*aFi 9

不同之处在于技术和速度.

当苹果公司开始从GCC的编译器和工具链过渡时,CLANG仍然年轻且有缺陷,因此LLVM被建立为GCC的后端,以促进其最终的替换.因此,代码进入并由GCC编译成某种中间形式,但被发送到LLVM以提供最终的机器代码和包装.

最终,LLVM,特别是CLANG已经足够成熟,可以直接取代GCC,这为编译和机器代码输出质量提供了惊人的速度提升(尽管许多人认为GCC仍然以牺牲速度为代价生成质量更好的代码) .

但是要解决您对游戏性能的担忧:虽然CLANG可能提供"更好"的编译体验,但性能不是编译器的工作.虽然优化和简化是编译过程的一部分,但人们仍然编写滞后游戏或产生无限循环而浪费到堆栈的事实表明性能是你的工作.编译器只能做这么多,其余的由你决定.编译器的类型或供应商也不会影响或破坏您的游戏或影响帧速率或可用性.您应该阅读有关ARM体系结构的低级优化的信息.关于NEON乐器的一些文章比学习"优化编译器"更有益处.

  • 我不同意'性能不是编译器的工作'.性能是使编译器变得更好的重要组成部分.理想情况下,用户应该能够编写可读的,可维护的代码,并依赖编译器来使其快速完成.Clang不是最成熟的编译器,与其他现代编译器相比,往往表现出性能缺陷.有时它也比较好,但往往不是.从用户的角度来看,Clang的强大实力在于高质量的诊断和一致性.从编译器开发人员的角度来看,Clang非常容易使用并且移动得非常快. (8认同)
  • 实际上它是相反的 - LLVM-GCC使用GCC前端但使用LLVM代码生成器.当LLVM项目启动时,其目标是仅提供后端代码生成器和其他编译器基础结构,但不提供完整的C编译器.Apple后来启动了clang项目,在LLVM基础架构之上构建完整的编译器. (2认同)