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

10

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

我对编译器比较新,所以任何帮助都将不胜感激。我特别想知道这两个编译器如何影响游戏性能。

2个回答

9
区别在于技术和速度两方面。当苹果开始从GCC编译器和工具链转向其他编译器时,CLANG还年轻且存在缺陷,因此LLVM作为GCC的后端构建,以便于其最终替换。因此,代码被输入并由GCC编译成某种中间形式,但被发送到LLVM以提供最终的机器码和打包。最终,LLVM尤其是CLANG已经足够成熟,可以完全取代GCC,这提高了编译速度并提高了机器码输出质量(尽管许多人认为GCC仍然以速度为代价产生更高质量的机器码)。
但是针对您对游戏性能的担忧:虽然CLANG可能提供了更好的编译体验,但性能并不是编译器的工作。虽然优化和简化是编译过程的一部分,但人们仍然会编写卡顿的游戏或产生浪费堆栈的无限循环,这表明性能是您的工作。编译器只能做到这么多,剩下的就取决于您。编译器的类型或供应商也不会影响您的游戏质量、帧率或可用性。您应该阅读关于ARM架构的低级优化方案。关于NEONinstruments的几篇文章会比学习“为编译器进行优化”更有益。

2
实际上情况恰好相反 - LLVM-GCC使用GCC前端,但使用LLVM代码生成器。当LLVM项目开始时,其目标是仅提供后端代码生成器和其他编译器基础设施,而不是完整的C编译器。后来,苹果公司启动了clang项目,在LLVM基础设施之上构建了一个完整的编译器。 - Sven
8
我不同意“性能不是编译器的工作”的说法。性能是评价编译器优劣的重要因素之一。理想情况下,用户只需编写可读性好、易于维护的代码,就可以依赖编译器使其运行更快。与其他现代编译器相比,Clang并不是最成熟的编译器,通常表现出性能方面的缺陷。偶尔也有很好的表现,但更多时候则不是这样。从用户的角度来看,Clang的强大之处在于提供高质量的诊断和符合性。而从编译器开发者的角度来看,Clang非常易于操作,更新速度也非常迅速。 - bames53
1
@Sven 你说得完全正确,我已经进行了编辑以反映出这一点。@barnes53:我之前的说法是因为尽管编译器确实会进行“优化”,但它们通常不会在没有明确指示的情况下执行任何内部操作。一个完美的例子就是 PPC 的旧 fsel() 函数,它允许函数在浮点返回时避免分支。编译器并不知道如何将分支折叠到 fsel 中,你必须告诉它这样做。此外,他问的是关于编译器而不是调试器,所以我觉得讨论 LLDB 是不合适的。 - CodaFi

2

另一个区别:Clang支持大多数C++11功能,而GCC 4.2-Apple则不支持C++11。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接