关于高级语言到机器语言生成的一些简单理解

2019年06月10日 浏览量:279

我们在学习一门高级编程语言,我认为了解编译过程是非常重要的一部分,今天我们就来了解一下。

大家都知道,大部分的计算机编程语言都需要编译。编译的过程就是由高级语言到机器语言。

但是过程并不是从高级语言就直接到机器语言了,而是高级语言到汇编语言在到机器语言。

那为什么编译器要这样做呢,为何不直接从高级语言到机器语言呢?我认为原因有如下几点。

1.因为从汇编语言到机器语言的转换程序是不需要自己编写的,编译器开发人员只需要把高级语言转换到汇编语言,然后调用汇编语言到机器语言的程序得到机器代码,如果直接从高级语言到机器语言,那这样对编译器开发人员的技术要求就非常高。

2.从高级语言到汇编语言的过程中,编译器会对高级语言进行自动的优化,让代码的执行效率最高,这样生成的机器代码的质量才是最高的。

微软的C#和VB等语言他们是编译成中间语言(MSIL),最后运行的时候通过通用语言运行库的转换,得到机器语言。

编译器不同,功能和特效也就不同,我们就拿C#语言和C语言来说明一下。

C# 编译器不会直接把源代码编译成机器码,而是先编译成中间语言(MSIL),由 CLR 加载,再由运行时 JIT 编译成机器码,最后再交给操作系统执行。

C++常用的编译器,一般都是直接成机器码。

比如:我在win7,用C#编译器写了一个程序,我移植到另一个win10系统上,依然是可以使用的,xp以上系统都会自动安装.net framework。因为编译器只是编译成中间语言(MSIL),然后即时编译成机器码,所以对于硬件和系统的改变是无关的。

C++编译器编译出来的机器码就不行了,会产生环境依赖(硬件和操作系统),比如前者是cpu是amd,后者的cpu是intel的。

但是在执行效率就可想而知了。



评论区:

昵称:
内容:
验证码: 5617