【CLR】1.1从源代码到托管模块:CLR的执行模型

【CLR】1.1从源代码到托管模块:CLR的执行模型
    有些书,需要速览,尽快尽量了解其技术使用。有些书,需要慢慢体会,从字里行间挖掘其深层次的含义。
    以下内容是我在《CLR via C# (第三版)》第一张第一节两页纸的学习中理解到的知识点,求围观,求品鉴!
    【该内容归类:CLR的执行模型】
    托管模块的组成部分如图所示
        
    在看一下的内容前,请知悉此时还并没有CLR的参与,主角是编译器,只是这些编译器是面向 CLR的。
    什么是面向CLR?就是这些编译器能生成CLR能编译的IL代码。  
    什么是 IL? 就是 Intermediate Language。具体内容我还没有看。稍后会有介绍。
    看看第[2]点内容,可以想象,CLR是在程序运行的时候存在的一个处理程序,这样一想,运行时便可以理解个一二了。
    看看第[1]点内容,为什么叫公共语言呢? 再看看第[12]点,因为CLR并不关心使用的什么语言开发的代码。
    那CLR和IL到底有什么联系呢? 看看第[7]、[8].d 。


    [1] CLR(Common Language Runtime),即公共语言运行时/库。
    [2] CLR核心功能有:内存管理,程序集加载,异常处理,安全性,线程同步等。
    [3] 面向CLR的编译器生成的结果都是一个“托管模块”(Mange Module)。
    [4] 托管模块 是一个标准的可移植执行体(Portable Executable,32bit,PE32/64bit,PE32+)文件。
    [5] 托管的程序集总是利用 Windows 的 DEP 以及 ASLR 来增强系统的安全性。
        (Data Execution Provention,数据执行保护),(Address Space Layout Randomization,地址空间布局随机化)
    [6] 本地编译器 生成的是 面向特定CPU架构(x86,x64,IA64)的代码.
    [7] 面向CLR的编译器 总是生成IL代码。
        IL代码有时也被称为“托管代码”,因为CLR要管理它的执行。

    [8] 托管模块包含以下几个部分:
        a.PE32/PE32+ 头:包含与本地CPU的相关信息;还包含,Window PE 文件头,文件类型(GUI,CUI,DLL),文件创建时间,不过在包含IL代码的模块中,这些信息被忽略。
        b.CLR头:包含表示该模块为托管模块的特定信息,CLR版本;一些标志(flag),模块的入口方法、元数据、资源、强名称等的位置/大小
        c.元数据:每个托管代码都包含两种元数据表;一种包含自定义的类型与成员,一种包含其引用的类型和成员。
        d.IL代码:运行时,CLR将IL代码编译成本地CPU指令。
    
    [9] 面向CLR的编译器不仅生成IL代码,而且还会在模块中生成完整的元数据
    [10] 托管模块=托管代码+托管数据
    [11] CLR 已经作为.NET Framework 的一部分提供,因此我们无需再安装CLR.
    [12] 第[4]点说明,不同的编译器(C,C++,C#,Iron Ruby...)生成的都是[标准]的 托管模块,CLR并不关心其使用的是什么语言编写的代码。
    [13] 回过头看[3]、[7]、[9]、[10]点,具有一些关联性。
    [14] 元数据 总是与 包含IL代码的文件 关联,因此元数据与其描述的IL代码永远不会失去同步。
    [15] 元数据到底是什么东西?我们在开发过程中经常遇到元数据,(Visual Studio)F12 看看 "FormsAuthentication" :
    
我一直以为这个元数据是直接 Search 类库,然后显示出来。然而,鼠标悬浮查看它所在的地址,竟然在Temp 下面
很显然,此时我们并没有编译过该程序,所以得出如下结论:(请注意字里行间)
    元数据 是编译器生成的,而不是编译器编译后的产物。
    IntelliSence 为什么能自动提示类,变量,方法及其参数?因为编译器能解析出元数据,而并不是 直接查询库文件 所得的结果。
 
[16] 最后托管与非托管的区别在于是否生成IL代码,如C++生成exe文件,不需要CLR的参与即可运行。当然,如果使用 /CLR 命令行,也可以使 C++ 编译器 生成 托管模块。Visual C++ 编译器是唯一的能同时定义托管与非托管数据类型的编译器。

    本文为个人学习笔记,上述表述如有不当之处,请留言批评指正。
    如有帮助,欢迎转载!


posted @ 2013-03-25 02:19  Charles-China  阅读(479)  评论(0编辑  收藏  举报