C ++和Java编译过程之间的区别

可能重复:
为什么C ++编译需要这么长时间?

嗨,

我在谷歌搜索了C ++和Java编译过程之间的差异,但是C ++和Java语言特性及其差异被返回。

我精通Java,但不是使用C ++。 但我修正了C ++中的一些错误。 根据我的经验,我注意到与C ++相比,C ++总是花费更多时间进行构建,以便进行小的更改。

问候巴拉


我脑海中出现了一些高级别的差异。 其中一些是概括性的,应该以“经常...”或“某些编译器......”为前缀,但为了可读性,我将把它排除在外。

  • C / C ++编译不会从二进制文件读取任何信息,而是仅从需要完整解析的头文件中读取方法/类型定义(例外:预编译头文件)
  • C / C ++编译包含一个预处理器步骤,可以进行大量的文本替换(这使得头文件预编译变得更加困难)
  • C ++语法比Java语法复杂得多
  • C ++类型系统比Java类型系统复杂得多
  • C ++编译通常会生成本地汇编代码,这比生成比较简单的字节代码要复杂得多
  • C ++编译器需要进行优化,因为没有任何其他的事情可以做到。 Java编译器几乎做了Java源代码到Java字节代码的简单1:1转换,没有在该步骤完成优化(这是留给JVM来做的)。
  • C ++有一个Turing完成的模板语言! (所以严格来说,需要运行C ++代码来生成可执行代码,并且C ++编译器需要解决暂停问题,告诉您是否可以编译任意C ++代码)。

  • Java将代码编译为由Java VM解释的字节码。 C ++必须编译成目标代码,然后编译为机器语言。 正因为如此,Java可能只编译一个类来进行较小的更改,而C ++对象文件必须与其他目标文件重新链接到机器代码可执行文件(或DLL)。 这可能会使过程花费更长的时间。


    我不确定你为什么期望Java和C ++的编译速度具有可比性,因为它们是具有完全不同的设计监控和实现的不同语言。

    这就是说要记住一些具体的差异:

  • Java被编译成字节码而不是机器码。 编译到这个抽象的虚拟机更简单。
  • C ++编译不仅涉及编译,而且涉及链接。 所以它通常是一个多步骤的过程。
  • Java执行一些延迟绑定,即将一个调用与一个函数关联,并且实际运行的代码在运行时完成。 所以一个领域的小改变不需要引发整个程序的编译。 在C ++中,这个关联需要在编译时完成,这叫做早期绑定。
  • 链接地址: http://www.djcxy.com/p/14961.html

    上一篇: Difference between C++ and Java compilation process

    下一篇: Android custom permissions