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