计算机编译过程

16 篇文章 1 订阅
12 篇文章 1 订阅
编译(compilation,compile) 
        利用编译程序从源语言编写的源程序产生目标程序的过程。 2、用编译程序产生目标程序的动作。 编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。 编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。
        目标代码指计算机科学中编译器或汇编器处理源代码后所生成的代码它一般由机器代码或接近于机器语言的代码组成目标文件即存放目标代码的计算机文件,它常被称作二进制文件。目标文件包含着机器代码(可直接被计算机中央处理器执行)以及代码在运行时使用的数据,如重定位信息,如用于链接或调试的程序符号(变量和函数的名字),此外还包括其他调试信息。目标文件是从源代码文件产生程序文件这一过程的中间产物,链接器正是通过把目标文件链接在一起来生成可执行文件或库文件。目标文件中唯一的要素是机器代码,例如,用于嵌入式系统的目标文件可能仅仅含有机器代码。
        机器语言是一种计算机能直接理解、识别和执行的程序设计语言,它由0和1两个二进制符号按照确定的规则描述和表达。机器语言的最大优点是计算机能直接识别、理解和执行,有极高的运行效率,在一些嵌入式控制系统中有时会使用机器语言编写的程序。机器语言有明显缺点,人们难以理解、阅读、编写机器语言程序,机器语言程序其可靠性难以保证,不易维护,可移植性很差。
       汇编语言是用一些易于理解的符号来取代机器语言中难于理解的二进制编码,如:用“ADD”代替加法的二进制编码“00000011”。用汇编语言替代机器语言编写程序,可大大提高程序的可理解性、可读性、可靠性、可维护性和可移植性。对于汇编语言程序,必须翻译转换成机器语言程序后,才能被计算机识别、理解和执行。
       高级语言分过程式语言、函数式语言、逻辑语言、结构化语言、模块化语言、系统语言、专用语言、通用语言、面向对象语言、解释执行语言、编译执行语言等。其中有的高级语言具有多种特征。高级语言程序不能被计算机直接识别、理解和执行,必须将其翻译转换成机器语言程序或者先翻译转换成汇编语言程序体,再通过汇编程序翻译转换成机器语言程序。
C代码编译过程与方法
       VC++6.0编译器是如何编译C语言程序的?一般用递归的方法一个语句一个语句的编译。一个编译器包括词法分析、语法分析、语义分析、中间代码的生成、目标代码的生成、代码优化等。其中词法分析的功能是将一个*.c文件读到内存中,然后根据这一大串字符串判断并分割出关键字、字母、标识符等等;语法分析的功能是根据标准c语言的语法判断这个*.c文件是否存在语法错误;语义分析的功能是根据标准c语言的语法确定程序的含义;中间代码的生成是根据源程序生成相应的过度程序;目标代码的生成是根据中间代码生成相应目标代码(如汇编,vc最终生成的是可执行文件:*.exe)代码优化是根据生成的目标代码进行优化,比如减少循环次数等等。
C#代码编译过程与方法  
    Visual C#的编译器和以往编程语言的编译器有着明显的不同。其最大的不同点就是,以往的程序编译器是把编写好的程序代码编译生成可以直接为计算机所使用的机器语言。虽然Visual C#的编译器也可以把编写好的程序代码编译成EXE或者是DLL文件,但这种文件只是一种IL文件(中间语言),此IL文件不能直接被计算机使用。只是当此IL文件被调用的时候,再通过一种名叫JIT(即时编译)编译器把此IL文件生成可以供计算机使用的机器代码。
  可见Visual C#的编译过程大致可以分成二个部分,第一个部分,从程序代码到IL文件,这个过程是通过人工干预来实现的,即通过CSC.exe来实现的;第二个部分,从IL文件到机器语言,这个工程是机器自动实现的。本文就将具体来说明一下第一个部分,即如何用CSC.exe来正确编译Visual C#文件。
    Asp.net程序是经过编译执行的,这个大家都知道,尤其是使用Codebehind的时候,必须先把背后的.cs文件编译形成.dll文件,然后才可以执行。
       从正确的编写c#代码到运行,.net FrameWork的工作过程大致如下:
1、编写正确的c#代码。
2、c#代码第一次编译为一种伪代码称微软中间语言(MSIL)和元数据,MSIL和元数据互同时储存在exe或dll 文件中,该伪代码是独立于任何CPU 的,所以只要装有.Net FrameWork的机器均可以运行该伪代码,这就增强了c#代码的可移植性。
3、程序执行时,该伪代码被CLR(Commom Language RunTime)捕获,CLR激活内部的 JIT(Just in time)编译器,将伪代码编译成针对特定CPU的机器语言,当然该步还要进行类型检查等,这样程序就能在任意合理的电脑中运行,得出结果。JIT 的意思为“仅在运行时编译”,所以整个代码的处理过程要编译两次。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮特大熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值