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

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)

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

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

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

公共语言规范Common Language Specification (CLS) 

公共类型系统Common Type System (CTS)

 

 

FCL与BCL的区别就是,FCL是一个大框架,下面分为BCL与补充类库,补充类库是在基础类库上做的补充,如:ADO.NET、ASP.NET、Windows.Forms等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值