Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compilation 在编程语言X中,一条语句生成多少行机器代码?_Compilation_Machine Code - Fatal编程技术网

Compilation 在编程语言X中,一条语句生成多少行机器代码?

Compilation 在编程语言X中,一条语句生成多少行机器代码?,compilation,machine-code,Compilation,Machine Code,在阅读一篇关于的文章时,作者提出了以下聊天: 我:你需要多少马力? SE:我不知道。 我:让我看看,主循环中有多少行代码? SE:10000。 我:什么语言? SE:Fortran 我:好的,每行Fortran大约有10行机器代码,所以 每个循环100000条指令;每个循环执行多少次 第二个? SE:每1/20秒。 我:好的,那就是20 x 100000=2mops(比我们所有的都快) 当时),也许我们最好重新考虑一下 这让我想知道,现代语言的数字是多少,比如Ruby?人们是如何发现的呢?我认为

在阅读一篇关于的文章时,作者提出了以下聊天:

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


这让我想知道,现代语言的数字是多少,比如Ruby?人们是如何发现的呢?

我认为不会有确切的答案。说“对于languange x,编译后的二进制文件在每个源代码行有y行”。但是,如果你仍然想找出可能是你可以采取大量的编译代码和相应的源代码,并找出平均每源代码行。
您可以使用任何二进制编辑器打开二进制文件,查看它生成了多少行。例如,就确定一段代码执行需要多长时间而言,Ollydbg已经不再适用于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

根据数组
x
y
的大小,表示
y=EXP(x)
的行可以执行任意长的时间。这同样适用于任何带有向量赋值的语言。

在聊天中,他们试图评估CPU性能。 如果您知道CPU性能和循环的执行时间,您可以得到每个循环和每行的CPU命令数。 你聊天时的计算是不精确的。 即使对于ruby,也可以进行类似的不精确计算。 请注意,如果说一行fortran代码是10个CPU命令,但对于某些循环来说是平均值,这是错误的,这是正确的

用ruby估算循环所用的时间。 将CPU性能(以每秒操作数为单位)乘以循环时间。您将获得每秒的操作数。
对循环中的行数除以每秒的操作数。这就是您的循环值。

对于X=“C””您可能希望从Microsoft了解一下。它说,(特定的)现代语言在实际接触硬件之前经过了大量优化。

这取决于语言和机器架构。有些语言甚至不直接针对硬件。例如,Java被编译成在虚拟机上运行的字节码。听起来他们在这里得到的是在优化代码之前对代码进行评估。在实践中,您可以使用分析技术来查看哪些代码行占用了最多的时间。您真的无法以这种方式度量事情,花费时间尝试也是徒劳的。在fortran时代(不算我们在技术上仍然处于fortran时代),您可以做这样的事情……死链接。这篇文章现在可以在