您的位置:首页 > 其它

CLR运行机制

2008-11-09 17:09 232 查看
Mircosoft.net技术包括.net框架(CLR及FCL)和IDE(Visual Studio)。

.Net框架核心CLR,CLR即为托管代码提供了一个运行时环境,它可用于多种语言进行开发,而且提供多种语言编写的代码互相调用的机制。

CLR提供了基于CLR语言所使用的标准类型集,提供了垃圾回收机制,无数据的标准格式,以及托管代码的打包技术。

CLR中有两个重要规范:CTS 和 CLS

CTS ( Common Type System )

定义了一套通用类型,它不规定语法及关键字,将语法与行为隔离,定义核心的抽象性质,它规定一个类型包含数据及操作成员,规定类型的操作成员的访问控制,以及管理类型的继承,对象的生存周期等规则。

CLS( Common Language Speciication )

它定义了面向CLR编绎器必须支持的一个最小性集合,实现跨语言互操作的特性,CLS定义的规则只对类型外部可见部分的约束。

CLR的编绎过程:

1、源程序(多种语言)经过各自对应的编绎器生成程序集(由一个或多个托管模块 )

2、装载程序集,经过JIT编绎生成本地CPU指令

托管模块

源文件经过编绎器生成的结果称之为托管模块,由CLR才能执行的PE文件。由PE表头,CLR表头,元数据,MSIL组成

MSIL

IL 是一种独立于CPU的机器语言,可以理解为面向对象的机器语言,它能够理解对象模型,能够创建和初始化对象,IL可运行于任何CPU平台,但前提必须是安装了某个版本的CLR

元数据

元数据是一块二进制数据,包含一定义表、引用表及清单表,描述定义及引用类型的相关信息和attributes特性

它的作用:进行代码的安全验证,垃圾回收机制可以通过它追踪对象的生存期等,利用ILDasm工具可查看元数据

JIT编绎过程:

1、CLR检测代码引用到的所有类型,分配一个内部的数据结构用于管理对所引用的类型的访问

(引用的类型中定义的每一个方法都有一个对应条目用于保存该方法实现代码的地址)
2、数据结构被初始化时,CLR将每一个条目设置为CLR内部的一个没有正式记录的函数,称之为JITComplier
3、CLR执行引用的类型中的方法时调用JITComplier,它先验证IL代码并将其编译为本地的CPU指令并保存在动态内存中
4、JITComplier将内部数据结构中被调用方法的地址替换为包含本地CPU指令的内存块地址
5、JITComplier跳转到内存块中的代码上

程序集

CLR的操作对象,由一个或多个托管模块组成,可视为逻辑上的EXE或DLL,它实现了分享类型的逻辑表示和物理表示,实现动态加载,更有效的实现代码的重用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: