关于内存效率的编译器和解释器

时间:2017-05-02 07:12:05

标签: interpreter

我理解了编译器和解释器的概念。我在互联网上研究了它,但我发现两个说法趋于矛盾: 一个是说---解释器不涉及中间代码,因此内存有效。

https://www.programiz.com/article/difference-compiler-interpreter

另一种说法是:解释器从输入中读取语句,将其转换为中间代码,执行它,然后按顺序接受下一个语句。 https://www.tutorialspoint.com/compiler_design/compiler_design_overview.htm

任何人都可以告诉我哪一个是正确的,哪一个是记忆效率的?

2 个答案:

答案 0 :(得分:0)

编码解释器的方法有很多种。提到的两个选项都是可能的,有不同的权衡。

答案 1 :(得分:0)

简短的回答是两篇文章都不对。两者都有一个非常狭隘的(旧式的)解释器是什么的想法,对应于我们可能称之为"命令处理器"。而且,这两篇文章都不是自我一致的,所以试图解决他们的分歧可能是浪费时间。

也就是说,当programiz引用说"没有生成中间目标代码时,因此内存效率很高,"我认为它意味着什么(使用它的术语)是一个解释器确实将一个语句翻译成中间代码(注意"图:解释器"包括一个标有&#34的框;中级Code"),但是:

  1. 该代码不是 object 代码。
  2. 执行该代码后,它会丢弃它,因此它一次不会在内存中包含多个语句的代码。
  3. 解释器不会将对象代码作为输出。
  4. 鉴于阅读,这两篇文章或多或少都同意。

    但即使考虑到“口译员”的狭隘定义,也要说它的内存效率很高,而且#34;"只是因为它一次最多只保留一个语句的内存中间代码,而忽略了解释器本身所占用的所有内存。

    此外,请注意,这只能讨论解释器本身的内存效率,而 NOT 关于它运行的任何程序的内存效率。

    简而言之:忘掉那些文章。 Wikipedia's article似乎是一个很好的起点。