威尼斯人线上娱乐

CL奥迪Q7基础与术语,将源代码编译成托管代码

5 4月 , 2019  

一、使用编制程序语言编写源码—>编制程序语言的编写翻译器(面向Clr)—->生成IL代码和元数据(包括:代码中声名的类和分子
以及所引述的成员)

1. 集体语言运营时(Common Language
Runtime,CL中华V)是一种可由各类编制程序语言使用的”运转时”。

  .Net 框架包罗多个部分:通用语言运转时(CLLX570)和.Net框架类库(FCL)。

CLR(Common Language Runtime):1个可由各种编制程序语言使用的”运维时”。

2、IL就被称之为托管代码,因为有Clr管理者它的推行

二.
CLBMWX⑤的主导功能(比如内部存款和储蓄器管理,程序集加载、安全性、至极处理和线程同步等)可由面向CLQX56的有着语言应用。

  CLR:
  

CL昂Cora的着力成效(内存管理,程序集加载,安全性,相当处理,线程同步等)可由面向CL猎豹CS陆的具有语言应用。

威尼斯人线上娱乐 1

  1. 用1个对应的编写翻译器编写翻译源代码之后,结果都是1个托管模块

    通用语言运转时(Common
Language Runtime,简称CL牧马人)是.Net框架的主导。意为它是2个可被各样不一致的编制程序语言切磋所采纳的运作时。所以只要编写翻译器能够编写翻译面向CL奥迪Q7的代码,开发职员能够运用别的自个儿喜爱的言语来编排代码。

托管模块(managed
module):标准的3多少人windows可移植执行体(PE32)文件,或然是正式的60个人windows可移植执行体(PE32+)文件,他们都亟待CL大切诺基才能进行。

 

威尼斯人线上娱乐 2

  CLR好处:

面向CLLX570的言语编写的源代码文件通过编写翻译器编写翻译后正是托管模块。

CL奥迪Q7基础与术语,将源代码编译成托管代码。==================关键词==================

威尼斯人线上娱乐 3

    将编写翻译器看作是叁个语法检查器和“正确代码”的分析器。它们对我们的源代码举行检查,确认保证大家编辑的装有东西都有含义,最终输出描述我们打算的通令连串。而大家毫不提心使用分裂的语法实行付出。

托管模块的组成都部队分:

源码、语言、语言编写翻译器、Clr、中间语言IL、元数据

4. 托管模块是3个正规的32/陆十人Microsoft Windows
可移植执行体(PE32/PE32+)文件,它们都必要CLTiggo才能进行。

  托管模块的变动进度**:**

一.PE3二或PE3二+头:标准的Windows
P文件头,PE3二能在x8陆,x6四上运维,PE32+只可以在X64上。标识了文件类型,包蕴GUI,CUI或然DLL,并蕴藏一个时间标记来提出文件的转移时间。

言语正是编写代码的应用的言语,有c# F# c++等

 

    大家能够接纳任何支持CL奥迪Q3的编制程序语言来创制源代码文件。然后选取相应的编写翻译器来做语法检查和源代码分析。然则无论选取的是何种编译器,最平生成的结果都以多少个托管模块(Managed
Module)。尽管用CLGL450扶助的编制程序语言,编写源代码文件。然后使用该语言的编写翻译器实行语法分析和语义分析,然后生成托管代码。  

二.CLRAV6只:包蕴使那些模块成为托管模块的音讯(CLRubicon来解释)。包括要求的CL帕杰罗版本,1些flag,托管模块入口方法(Main)的MethodDef元数据token以及模块的元数据,财富,强名称,一些阐明及其余不太重大的数目项的职位/大小。

语言编写翻译器:每一个语言都对应着一个编译器,在,.net平台要想协调写的代码能够被执行,编写翻译器都要面向CL奇骏(公共语言运维时).

5.
托管的先后集应用Windows的数量实行爱护地址空间布局随机化增加全部种类的安全性。

  托管模块威尼斯人线上娱乐,:

3.元数据:各类托管模块都带有元数据表。重要有二种表:一种表描述源代码中定义的门类和成员,另壹种描述源代码引用的项目和分子。Def
& Ref.

Clr :公共语言运转时,执行进度是 
源码—托管代码(由语言编写翻译器生成)–加载公共语言运维时—执行代码

 

    3个亟需CL奥德赛才能够推行的正儿捌经Windows可移植可执行文件。(portalbe
executable 简称PE)。  

4.IL(中间语言)代码:编写翻译器编写翻译源代码生成的代码。在运营时,CLLX570将IL编写翻译开支机CPU指令。(如今实用的编写翻译器是roslyn,也有编写翻译器直接将源代码编写翻译器编写翻译开支地代码)。

IL:
本机代码生成器生成的代码都以面向特定架构的Cup的代码(x八陆,x6四,arm),而种种面向Clr的编写翻译器生成的代码都以面向IL的代码,加载运转时后,会把IL代码解释成cup能识其余机器码,最后执行

  1. 托管模块的逐壹组成都部队分

  托管模块的种种组成都部队分:

托管代码(managed code):IL代码的四个此外的叫法。

 

威尼斯人线上娱乐 4

组成部分

描述

PE表头

  标准的Windows PE文件表头,类似于通用对象文件格式(Common Object File Format,简称COFF)表头。

  表头指出了文件的类型:GUI(图像用户界面),CUI(控制台用户界面),或者DLL(译注:DLL在以前表示 Windows中的动态链接库文件,即Dynamic Link Library,它是以动态链接的方式提供的一组函数库。

  在.net平台中,由于和传统的动态链接库文件有着相同的扩展名.dll,所以DLL文件的名称 被沿用了下来,但其含义已经有所改变。.NET中的DLL特指程序集文件的一种形式),

  另外该表头还包括一个时间标记用于表示文件创建的时间。

  对于仅包含 IL代码的模块,该表头的大多数信息会被忽略。

  对于包含有本地CPU代码的模块,该表头还会包含有关本地CPU代码的一些信息。

CLR表头

  包含标识托管模块的一些信息(可以被CLR或者一些实用工具解析)。

  这些信息包括托管模块所需要的CLR版本号,一些标记,托管模块入口点方法(Main方 法)的MethodRef元数据标记,以及有关托管模块的元数据、资源、强命名、标记和其他一些意义不是太大的信息的位置和尺寸

元数据

  每个托管模块都包含一些源数据表。

  元数据表主要分两种,一种用于描述源代码中定义的类型和成员,一种用于描述源代码中引用的类型和成员

中间语言(IL)代码

  编译器在编译源代码时产生的指令。CLR在运行时会将IL代码编译成本地CPU指令

程序集(Assembly):抽象概念,
一个或多个模块/财富文件的逻辑性分组。在CLSportage世界中,程序集也就是“组件”。

 

 威尼斯人线上娱乐 5

 

清单(Manifest):包涵在PE3二(+)头的数据块,元数据表的集纳。描述了咬合程序集的文件,程序集中的文件所完成的公然导出的品种(PUBLIC)以及与程序集关联的能源和数据文件。

为了推行托管的代码,用户得要在温馨的微处理器上设置好“运营时”(近年来是framework的一片段)

  1. 本地代码编写翻译器生成的是面向特定CPU架构(比如x8陆、x6四和IA6四)的代码。

  IL代码

编写翻译器私下认可将转移的托管模块转换到程序集,约等于含有清单的托管模块。程序集把它的逻辑表示和物理表示区分开。

 

 

    半数以上在先的编译器发生的代码都以面向特定CPU的连串的。而全数与CLPRADO包容的编写翻译器发生的都是IL代码。由于生成期和执行受CLHaval管理的原故,IL代码有时也被作托管代码(managed
code)。

JIT(Just-in-time):CL凯雷德中的JIT编译器把IL代码装费用机(NATIVE)CPU指令,私下认可JIT会对差异的CPU框架结构进行一定的优化。

八.
各类面向CL奥德赛的编写翻译器生成的都以IL(中间语言)代码。IL有时称为托管代码,因为CLRubicon要治本它的履行。除了生成IL,面向CLCR-V的种种编写翻译器还要在各样托管模块中生成完全的元数据。

 

 

  元数据(metadata)

玖.
 元数据是一组数据表。个中有个别数据表描述了模块中定义的始末,比如类型及其成员。还有1对元数据表描述了托管模块引用的剧情,比如导入的花色及其成员。元数据连接与富含IL代码的文件涉及。事实上,元数据连接嵌入和IL代码相同的EXE/DLL文件中,两者密不可分。

         全体面向ClSportage的编写翻译器都急需为托管模块发生完全的元数据。

 

 元数据就是二个数据表的集聚,在那一个表中,其中有的用以描述托管模块的中所定义的内容(比如所定义的类型和它们的分子),别的还有1些用来描述托管模块中所引用的始末(比如被引述的品种和它们的成员)。

  1.  元数据的用途

元数据是一丝开头的技能如类型库、接口定义语言(IDL)文件的二个超集。必要提出的是CL途观的元数据远比它们完整。而且像类型库和IDL,元数据连接和包涵IL代码的文件相关联。实际上,元数据连接和这个代码壹起被安置到同2个EXE/DLL文件中,两者根本可大概分离。因为编写翻译器总是同是增进生元数据和IL代码,并且一连同时将它们嵌入到变化的托管模块中,所以元数据和它所描述的IL代码之间总能保持同步。

  •    
    编写翻译时,元数据消除了对当地C/C++头和库文件的须求,因为在承担贯彻项目/成员的IL代码文件中,已盈盈和引用的品种/成员有关的全数新闻。编写翻译器可径直从托管代码中读取元数据。
  •     Visual Studio
    使用元数据帮你写代码。它的”智能感知”技术可以解析元数据。
  •     CLOdyssey的代码验证进度使用元数据确定保证代码执行“类型安全”的操作。

 

    ……

 

 


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图