在Java中,当我们编译一个文件时,我们会得到字节码,然后用虚拟机执行。
用C++怎么样?当我们用g++编译文件时会发生什么,我们会得到什么汇编代码或二进制代码?
C和C++被编译成一个对象文件。这些文件包含可以直接在目标处理器上执行的机器代码。然而,在完全可执行之前,我们需要将所有对象文件链接在一起。这不会更改代码,只是为丢失的符号填充所有地址。代码的格式保持不变。
在linux上,对象文件是ELF格式的。
然而,可以使用链接时间优化来编译文件。除了机器代码之外,这通常还会产生一个字节码。当链接到链接时间优化时,链接器将在执行跨编译单元(对象文件)优化时将字节码转换为机器码。