如何比较编译器

时间:2009-01-26 12:33:54

标签: c compiler-construction

您使用什么指针来比较编译器?

我被告知gcc是最好的C编译器,这是真的吗?如果是这样,为什么?

我的意思是这一般,所以你可以说明哪种编译器更适合哪种架构。

(我听说igc更适合英特尔,但我不知道为什么)

我个人打算使用AMD 64位,在Linux和Windows,GUI和非GUI应用程序中开发。

7 个答案:

答案 0 :(得分:11)

一般来说:首先,编译器质量最重要的方面是正确性。具有错误或意外行为的编译器可能会破坏您的一天。 最终代码的质量,如速度,大小和内存使用情况,也位于列表的顶部。

编译的速度是另一个方面,尤其是在编译大型项目时。

我觉得特别重要的一件事是错误处理,当编译器遇到它不能(或不会)处理的东西时,你得到的消息质量。

答案 1 :(得分:11)

嗯,不知道你在哪里听说gcc是“最好的C编译器”。它是无处不在的,也比大多数商业UNIX供应商在20世纪90年代出现gcc时提供的原生C编译器要好得多。

但是什么定义了“最佳”?

  • 编译代码的时间;
  • 已编译代码的大小;
  • 编译代码的速度;
  • 已编译代码的内存使用情况;
  • 错误和断层概率;
  • 支持;
  • 社区;

不同的事情对不同的人很重要。

这是一个set of metrics comparing gcc to Intel's compileranother comparison with clang。我相信你也可以找到一些与微软编译器的比较。

一般来说,人们并不是所有关心相关大小或速度或编译器(或者甚至必须将输出的大小或速度小于两倍),而是它是否有效(这是一个十年或两年前的真正问题),它是否支持相关标准,以及它是否有任何奇怪/错误/功能你必须解决。

答案 2 :(得分:3)

正确性正弦

我也喜欢

  • 让编译器运行得非常快(例如lccocamlc
  • 让编译器产生非常好的代码(如ocamloptMLton

如果它们是两个不同的编译器就没关系。

讨厌拥有一个编译器,当新版本发布时会使程序中断。 (Richard Stallman,给你的办公室打电话。)

答案 3 :(得分:2)

我知道INTEL和MS编译器已经开始为SSE3/4指令进行代码生成,并在编译器中执行诸如展开循环和支持向量化之类的巧妙事情。不确定GCC是否已经这样做了。

答案 4 :(得分:2)

我一直认为错误消息和警告会有所不同。有些编译器会让你不必理解他们想说的内容。其他人更方便用户使用。如果你能够在没有编译器无休止地警告你自己创建的东西的情况下启用警告,那也很好。

答案 5 :(得分:0)

你的意思是

  • 最好的编译速度
  • 最好用最细微的代码
  • 最快的代码?

您可以创建一个测试应用程序,可能带有一些讨厌的代码(需要智能优化器)并使用所有编译器来测试它。

比较您的基准并使用您最喜欢的基准。

答案 6 :(得分:0)

gcc是一个可怕的编译器。它拥有最好的技术支持,可能是因为它的价格,用户数量和互联网(以及谷歌寻找帮助)。但就其产生的机器代码质量而言,其输出平均至低于平均水平。