跨平台
我理解下的是跨平台:在不同的平台(windows、linux、xp等各种系统+CPU)下,源代码不需要重新编译便可运行。
不同的平台下对应的机器指令、操作系统机制有很大的差异。
Java跨平台原理
Java程序编译执行过程
- 源文件由编译器编译成.class字节码文件,javac.exe是编译器
- 字节码由Java虚拟机解释生成最终的机器代码来执行,java.exe是解释器,属于JVM的一部分
JVM
JVM全称是Java Virtual Machine,也就是Java虚拟机。Java程序运行在虚拟机上,不同的平台有对应的自己的虚拟机版本。
Java跨平台
因此,跨平台的不是Java语言本身,实际上是.class文件。.class文件可以在任何运行JVM的平台上解释执行,不需要重新编译生成新的.class文件。
C语言的跨平台?
C程序编译过程
- 预处理:对宏、头文件等进行处理,生成最终需要编译的文件
- 编译:将高级语言代码文件编译为汇编语言文件(.s)
- 汇编:通过编译器将汇编语言编译成目标代码(.o/.obj)
- 链接:将一个程序执行需要的二进制文件关联起来,形成可执行文件(.exe)
C语言跨平台
C语言不能跨平台,是因为生成的目标文件不能在不同的平台下执行,而是要用该平台下的编译器重新编译运行。
PS: