浅谈从源代码文件到二进制可执行文件的过程
分类: 编译原理2012-11-09 21:04 89人阅读 评论(0) 收藏 举报=== .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虚拟机的硬件平台和操作系统上的二进制文