您的位置:首页 > 编程语言 > C#

CLR via C#读后感1-CLR的执行模型

2011-05-11 12:42 405 查看
CLR via C#这本书是无意间在网上看到别人极力推荐的,找到pdf扫描本后,就迫不及待的看了起来。通过前几章的阅读,发现对.NET底层有了一种新的认识,不再像以前一样只是单纯的写代码。尤其是CLR(Common Language Runtime)的作用,运行方式,有了个大致概念。

CLR是一个可由多种编程语言使用的“运行时”,CLR的核心功能(内存管理,程序集加载,安全性,异常处理,线程同步)可由面向CLR的所有语言使用,所以,在编写源文件的时候,可以选择多种语言(C++/CLI,C#,J#,VB,IronPython,IronRuby,或者IL),至于IL,是微软的一个中间语言,任何C#源代码,都要编译成MSIL+元数据作为托管模块,在运行的时候,CLR运行托管模块,将IL再由JIT(Just-In-Time)编译为本机代码,最终执行。

每一个托管模块包括四个部分:

1.PE32或PE32+头。指明了运行环境是32(64)位或64位Windows系统。

2.CLR头。包含了需要的CLR版本,一些flag,托管模块入口方法(Main方法)以及各种信息。

3.元数据。每个托管模块都包含元数据表,有两种类型,一种类型的表描述源代码中定义的类型和成员,一种类型的表描述源代码中引用的类型和成员。

4.IL代码。编译器编译源代码后生成的代码,在运行的时候,CLR再将IL编译为本地CPU指令。

1.执行程序集代码。

为了执行一个方法,必须先将IL指令编译成本地指令,这是CLR的JIT编译器的职责,一个方法(自定义或者FCL函数)在第一次执行时,会造成一些性能损失,因为要对它进行编译,以后对其方法的所有调用,都采用本地代码(本机CPU代码)的形式全速运行,无需再次编译。JIT编译器将本地CPU指令存储在动态内存中。一旦应用程序终止,编译好的代码就会被丢弃。所以,将来再次运行应用程序,或者同时启动两个应用程序实例(在操作系统中,启动两个相同的应用程序也被认为是两个不同的进程),JIT编译器必须再次将IL编译为本地指令。

2.通用类型系统(CommonTypeSystem,CTS)。

CLR完全围绕类型展开的,所以有了”通用类型系统”CTS(CommonTypeSystem),它描述了类型的定义和行为。使用的语言不同,定义类型的语法也不同,但是无论使用哪种语言,类型的行为都是相同的,因为最终是由CLR的CTS来定义类型的行为。比如C#中,int为32位整形数,而在CTS中,Init32为32位整形数,定义了一个int型变量a,a最终都会生成为Init32型。再比如string就是C#的变量类型,而String就是CTS的变量类型。一般情况下,大写的都为CTS类型。

3.公共语言规范(CommonLanguageSpecification,CLS)。

只有语言遵循了Microsoft定义的CLS规范,一个语言才可以访问另一个语言类型的成员。

4.与非托管代码的互操作性。

托管代码就是指运行时,是托管在CLR上,由CLR具体调度、执行、管理。非托管代码指直接调用Win32API进行运行操作。C++.NET并不是传统的C++的扩展,而是将C++程序重新架构,托管在CLR上执行。称为Managed C++。

托管代码可以调用DLL中的非托管函数,托管代码可以使用现有的COM组件,非托管代码可以使用托管类型。

.NET的架构图(3.5之前)



通用语言基础架构(Common Language Infrastructure,CLI)

[b]通用语言运行平台(Common Language Runtime,CLR)[/b]是对CLI这个架构在Windows平台的实现

[b][b]类库(Framework Class Library,FCL)[/b][/b],所有在.NET能够使用的类库。

[b][b][b]基类库Base Class Library(BCL)[/b][/b][/b]其中包含一些基础的类,如:IO,String,Net等等。

[b][b][b][b]公共语言规范Common Language Specification (CLS) [/b][/b][/b][/b]

[b][b][b][b]公共类型系统Common Type System (CTS)[/b][/b][/b][/b]

FCL与BCL的区别就是,FCL是一个大框架,下面分为BCL与补充类库,补充类库是在基础类库上做的补充,如:ADO.NET、ASP.NET、Windows.Forms等
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: