浅谈从源代码文件到二进制可执行文件的过程

=== .c ===

预处理 -》.c (源文件)

编译-》.s/asm (汇编程序)

汇编-》.o/obj 目标程序(二进制文件)

链接-》.exe可执行程序 (二进制文件)

(1) 为什么要生成汇编,而不是直接从源文件编译成机器指令(二进制代码)?

首先,汇编语言作为机器指令的助记符,调试以及优化起来都会比较方便;

其次,汇编到机器指令的过程是由硬件完成的,是一个自动过程,让硬件来完成效率较高;

最后,如果要将源文件直接转换成机器指令,那么编译器编写者就必须要非常数量机器码,这是一个比较困难且低效的过程。

(2) 详细解释从源文件经过编译成为汇编语言的过程?

词法分析(Token),语法分析(syntax tree),语义分析,优化,代码生成。

=== .java ===

java编译器将源文件编译成.class文件(平台无关)

JVM的Class Loader负责将class文件加载到JVM中

利用Windows/Linux下的字节码解释程序,将class文件解释成机器指令(机器指令是CPU能直接识别并执行的指令,它的表现形式是二进制编码。机器指令通常由操作码操作数两部分组成)。没有转换成汇编语言的过程

(1) 为什么引入class文件?

class文件径打破了C或者C++等语言所遵循的传统,使用这些传统语言写的程序通常首先被编译,然后被链接成单独的、专门支持特定硬件平台和操作系统的二进制文件。通常情况下,一个平台上的二进制可执行文件不能在其他平台上工作。而Java class文件是可以运行在任何支持java虚拟机的硬件平台和操作系统上的二进制文件。

你可能感兴趣的:(浅谈从源代码文件到二进制可执行文件的过程)