zoukankan      html  css  js  c++  java
  • CLR执行模型与常见的几个概念

    一、CLR执行模型

    1.1从代码到程序集

    CLR执行的模型是从代码开始,经过编译器生成托管模块,默认情况下可以让多个托管模块和资源生成程序集。下图为其大致过程。

    image

    1.2执行程序集

    当系统运行托管模块时会检查文件头,判断启用一个32位的进程还是64位的,然后会在其进程中加载对应的MsCorEE.dll,里面有个初始化CLR的一个方法,初始完CLR,加载程序集,进入程序入口方法。在执行Main方法之前,为了能让电脑运行程序,CLR必须让IL程序集转化成指令。首先CLR会建立一个内部的数据结构,用于管理IL方法对CLR的访问,如果函数是第一次对其CLR的访问,那么对应的JIT会让程序集的对应的IL方法通过CLR转化成了指令,然后JIT把指令的地址告诉指向自己的方法,以便以后IL方法可以直接指到电脑上的指令,从而减少像第一次的通过JIT得到指令的过程。大致的图如下

    image当应用程序终止时,再次启动还需要jit的转化过程。

    二、CLR常见的几个概念

    下面主要介绍几个与CLR有关的常见概念:主要包括程序集,托管模块,CLR,FCL,CLS,CTS。

    2.1托管模块:主要由PE32(+)头,CLR头,元数据,IL代码组成

    其中PE32(+)头主要标模块的文件类型,生成时间等。还包括了与cpu代码中的信息,如生成代码时适用于32还是64的cpu以及任何的cpu。

    CLR头主要包含了需要的CLR版本,托管程序入口的方法(Main方法)MethodDef元数据标识,以及自身的元数据、资源、强名称等。

    元数据主要包括托管模块的元数据表,主要是自身的类型定义信息,引用类型信息,如果是一个是单独程序集,还包括程序集的信息,下一篇会着重介绍。

    IL代码当源代码通过编译后,就会生成IL代码。IL代码通过CLR中的JIT才能转化成CPU指令。

    2.2程序集

    程序集:可能是多个托管模块和资源组成,当然也可以是单个模块组成。

    其他的几个就用下面的比喻类解释

    菜谱:它是基于通用语言基础架构(Common Language Infrastructure,CLI)。它就像一本江湖上失传已久的菜谱。

    厨师通用语言运行平台(Common Language Runtime,CLR),是对CLI这个架构在Windows平台的实现。简单地理解就是CLR这个厨师,让CLI这本菜谱发挥了其真正的作用。

    下面我们来尝尝这些佳肴:

    食物类库(Framework Class Library,FCL),所有在.NET能够使用的类库。分为两部分,一部分为原料,另一部分为成品菜

    • 原料基类库Base Class Library(BCL),顾名思义,其中包含一些基础的类,如:IO,String,Net等等。它们是做菜所必需的原料,当然也可以直接吃。
    • 成品菜FCL中的其他类。这些类库基本上都是引用BCL,在这些类库的基础上做的扩充。如:ADO.NET,ASP.NET,Windows.Forms等等,它们是我们编写程序更加方便,专一。

    餐具公共语言规范Common Language Specification (CLS)公共类型系统Common Type System (CTS) ,是CLI的一部分内容,它们的目的是保证各种语言与.NET Framework的兼容性的。就好像有的食客习惯用筷子,有的则喜欢用叉子,像八戒就用九齿钉耙。有了CLSCTS,各路食客就能使用自己喜欢用的餐具吃上可口的食物了。例如:把C#中的int和VB中的Integer统一映射到System.Int32。

    食客:各种语言,C#,VB,等等。

    三、总结

    C#项目->编译成->程序集(IL)——>CLR中的及时语言编辑器->为cup的指令。

    本文主要介绍了CLR执行模型和常用的几个概念。希望能从总体上认识一下.net。菜鸟如果有不对的地方,希望大家多多指教!

    四、参考资料

    http://www.cnblogs.com/eshizhan/archive/2010/01/26/1657041.html

    《CLR via C#》

    http://www.cnblogs.com/JimmyZhang/archive/2012/11/27/2790759.html

  • 相关阅读:
    poj 2676 Suduku (dfs)
    poj 1562 Oil Deposits (dfs)
    poj 2907 Collecting Beepers (dfs)
    poj 1655 Balancing Act (树形dfs)
    poj 3411 Paid Roads (dfs)
    hdu 2896 病毒侵袭 (AC)
    hdu 3065 病毒侵袭持续中 (AC)
    poj 2251 Dungeon Master (bfs)
    java中debug使用
    Swing入门级小项目总结
  • 原文地址:https://www.cnblogs.com/lzhp/p/3258713.html
Copyright © 2011-2022 走看看