编程语言X中的一个语句生成了多少行机器代码?

时间:2011-08-16 18:30:59

标签: compilation machine-code

阅读有关Lost Programming Skills的文章,作者提出了这个聊天:

  

我:你需要多少马力?
  SE:我不知道。
  我:让我们看看,你的主循环中有多少行代码?
  SE:10,000。
  我:用什么语言?   SE:Fortran
  我:好的,每行Fortran大约有10行机器码,所以   每个循环100,000个指令;循环执行的次数   第二?
  SE:每1/20秒。
  我:好的,所以20 x 100,000 = 2mops(这比我们的任何东西都快   当时),也许我们最好重新考虑一下。

让我想知道,现代语言的数量是多少,比如说Ruby?如何找到?

4 个答案:

答案 0 :(得分:0)

我不认为会有一个确切的否定。说“对于languange x,已编译的二进制文件每个源代码行有y行”。但是,如果你仍然想找出可能是你可以采取一个大的没有。编译代码和相应的源代码,找出每个源代码行的平均值。 您可以使用任何二进制编辑器打开二进制文件,以查看它生成的行数。例如。 Ollydbg的

答案 1 :(得分:0)

在确定一段代码执行所需的时间方面,这对Fortran来说甚至都不起作用了!如果你在Fortran 90中写这个:

SUBROUTINE foo(x, y)
  IMPLICIT NONE
  REAL, DIMENSION(:), INTENT(IN) :: x
  REAL, DIMENSION(:), INTENT(OUT) :: y
  y = EXP(x)
END SUBROUTINE foo

y = EXP(x)行可能需要任意长时间才能执行,具体取决于数组xy的大小。任何带矢量赋值的语言都是如此。

答案 2 :(得分:0)

在聊天中,他们试图估算CPU性能。 如果您了解CPU性能和循环执行时间,则可以获得每个循环的CPU命令数,然后每行。 聊天中的计算并不准确。 即使对于红宝石,你也可以做类似的不精确计算。 请注意,说一条fortran行是10个CPU命令是错误的,但是某些循环的平均值是正确的。

估计循环在ruby中所花费的时间。 将您的CPU性能(每秒操作数)乘以循环时间。您将每秒获得一次操作。 将每秒的操作除以循环中的行数。这是你的循环价值。

答案 3 :(得分:0)

对于X =“ C#”,您可能需要查看Microsoft的Faster Managed Code: Know What Things Cost。它说,在实际接触硬件之前,(特定)现代语言已经过大量优化。