【发布时间】:2012-08-18 16:40:47
【问题描述】:
LLVM GCC 4.2 和 Apple LLVM 编译器 3.1 之间的主要区别是什么?
我对编译器相当陌生,因此感谢您提供任何帮助。此外,我对这两种编译器如何影响游戏性能特别感兴趣。
【问题讨论】:
标签: ios compiler-construction llvm llvm-gcc
LLVM GCC 4.2 和 Apple LLVM 编译器 3.1 之间的主要区别是什么?
我对编译器相当陌生,因此感谢您提供任何帮助。此外,我对这两种编译器如何影响游戏性能特别感兴趣。
【问题讨论】:
标签: ios compiler-construction llvm llvm-gcc
区别在于技术和速度。
当 Apple 开始从 GCC 的编译器和工具链过渡时,CLANG 还很年轻,并且存在缺陷,因此 LLVM 被构建为 GCC 的后端,以促进其最终替代。因此,代码进入并由 GCC 编译成某种中间形式,但被发送到 LLVM 以提供最终的机器代码和打包。
最终,LLVM,尤其是 CLANG 已经足够成熟,可以彻底取代 GCC,这为编译提供了惊人的速度提升,并提高了机器代码输出的质量(尽管许多人认为 GCC 仍然以牺牲质量为代价来生成质量更好的代码速度)。
但是为了解决您对游戏性能的担忧:虽然 CLANG 可能会提供“更好”的编译体验,但性能并不是编译器的工作。虽然优化和简化是编译过程的一部分,但人们仍然编写延迟游戏或产生浪费堆栈的无限循环这一事实表明 性能 是你的工作。编译器只能做这么多,剩下的就看你了。编译器的类型或供应商也不会成就或破坏您的游戏,也不会影响帧速率或可用性。您应该阅读有关 ARM 体系结构的低级优化。几篇关于 NEON 和 instruments 的文章比学习“为编译器优化”对你有好处。
【讨论】:
fsel(),它允许函数放弃带有浮点返回的分支。编译器不知道如何将分支折叠到 fsel,您必须告诉它这样做。另外,他问的是编译器,而不是调试器,所以我觉得讨论 LLDB 是不合适的。
另一个区别:Clang 支持大部分 C++11。 GCC 4.2-Apple 将不支持 C++11。
【讨论】: