由编译的编译器执行编译的代码

Oz1*_*123 13 c performance gcc compilation

如果我想从中获得更好的性能,比如说MySQLdb,我可以自己编译它,我会得到更好的性能,因为它不是在i386,i486上编写的,只是在我的CPU上.此外,我可以选择编译选项等等......现在,我想知道对于非常规软件(例如编译器)是否也是如此.这是第一部分:

  • 编译像GCC这样的编译器会产生更好的性能吗?第二部分:
  • 我自己编译的编译器编译的代码会更好吗?

(是的,我知道,我可以编译我的编译器并对其进行基准测试......但也许......有人已经知道了答案,并将与我们分享=)

pax*_*blo 14

在回答你的第一个问题时,几乎肯定是的.二进制版本gcc将是"最低公分母",如果您使用更适合您的系统的特殊标志编译它们,它很可能会更快.

至于你的第二个问题,没有.

无论你如何优化它,编译器的输出都是相同的(当然,除非它有问题).

换句话说,即使你在编译时完全填满你的编译器标志gcc,到你的特定编译版本gcc需要一个半星期来编译"Hello World",实际的"Hello World"可执行文件应该与一个由"最小公分母"产生的gcc(如果你使用相同的标志).

  • 关于第二部分:编译器的引导通常分3步完成:1)使用现有的(可能是最小的,非优化的)编译器编译编译器,2.)使用生成的二进制文件编译编译器步骤1.(即用自己编译)和3.)使用步骤#2中生成的编译器编译编译器.步骤#2和#3中生成的二进制文件应该完全相同(除了一些嵌入的时间戳或类似的东西),并且该事实实际上用于检查编译器是否正确编译自身. (4认同)

ami*_*mit 5

(1)有可能.如果您为编译器引入了一个新的优化,并使用此优化重新编译它 - 重新编译的代码可能会更好地执行.

(2)没有!!!! 编译器无法改变代码的逻辑!在您的情况下,代码的逻辑是最终生成的本机代码.因此,如果使用编译器A_2或B编译编译器A_1,则不会影响A_1生成的本机代码[在此处A_1,A_2是相同的编译器,索引仅为了清晰起见].

  • +1为粗线.实际上编译编译器并不意味着您已经添加了更快的自己的优化技术. (3认同)