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

Boo*_*ean 11 c++ java compiler-construction

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

嗨,

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

我精通Java,但不熟悉C++.但我修复了C++中的一些错误.根据我的经验,我注意到与Java相比,C++总是花费更多时间来进行微小的更改.

关心巴拉

Joa*_*uer 11

我想到了一些高层差异.其中一些是概括,应该以"经常......"或"一些编译器......"作为前缀,但为了便于阅读,我将其排除在外.

  • C/C++编译不读取二进制文件中的任何信息,但仅从需要完整解析的头文件中读取方法/类型定义(例外:预编译头文件)
  • C/C++编译包括一个预处理器步骤,可以进行大量的文本替换(这使得标头预编译更难做)
  • C++语法比Java语法复杂得多
  • C++类型系统比Java类型系统复杂得多
  • C++编译通常会生成本机汇编代码,与相对简单的字节代码相比,它的生成要复杂得多
  • C++编译器需要进行优化,因为没有任何其他东西可以执行它们.Java编译器几乎将Java源代码简单地1:1转换为Java字节代码,在该步骤中不进行任何优化(这是JVM要做的).
  • C++有一个模板语言,图灵完成!(严格来说,需要运行 C++代码来生成可执行代码,C++编译器需要解决暂停问题,告诉您是否可以编译任意C++代码).


Aar*_*ron 9

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