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

2022-09-04 06:58:35

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

你好

我在谷歌中搜索了C++和Java编译过程之间的差异,但是返回C++和Java语言功能以及它们的差异。

我精通Java,但不精通C++。但是我在C++修复了几个错误。根据我的经验,我注意到,与Java相比,C++总是需要更多的时间来构建微小的更改。

问候巴拉


答案 1

我想到了一些高层次的差异。其中一些是概括性的,应该以“经常......”为前缀。或“一些编译器...”,但为了可读性,我将省略它。

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

答案 2

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


推荐