• c# 深入探索之CLR


    概念:

    CLR :

    公共语言运行时(Common Language Runtime) 是一个可由多种编程语言使用的"运行时",它负责资源管理(内存分配和垃圾收集等),并保证应用和底层操作系统之间必要的分离。CLR的核心功能(内存管理、程序集加载、安全性、异常处理和线程同步)可由面向CLR的所有语言使用。

    通俗一点说就是:不管是c# 、c++、 vb、f#、甚至是java等各编译器面向CLR的语言,都可以借用CLR里已经实现的核心功能。

    例如:CLR使用异常报告错误,因此,面向它的任何语言都能通过异常来报告错误;CLR允许创建线程,所以面向它的任何语言都能创建线程

    托管模块

    用支持CLR的任何一种语言创建的源代码文件,再经过相应的编译器检查语法和分析源代码,编译生成。

           是一个标准的32位的可移植执行体(PE32)文件或一个标准的64位可移植执行体(PE32+)文件,它们都需要CLR才能执行。下图:是将源代码编译成托管模块的过程

           

                                               

              托管模块的组成:

                                  

    以上是关于托管模块高大上版本的介绍,以下我再接地气的以C#语言作为主角介绍以下

        程序员写完一段优美的c#代码后,会通过自带的编译器编译,生成托管模块,托管模块在一个可移植的PE文件中(如 .exe 、.dll)

                   PE文件里的托管模块,你可以当做c#的一个类,类里有四个属性,一个PE头(介绍该文件的信息),一个CLR头(描述这个对象的整体的一些信息,比如main入口),元数据(这个很关键,一种元数据表包含源代码中定义的那些那些类型和成员的描述信息,另一种包含引用的类型和成员的描述信息),IL代码(也很关键:就是你的源代码被编译后的代码,又称中间语言)。

        托管模块的主要组成就是IL与元数据:  IL代码有时候也叫托管代码,因为CLR管理它的执行  元数据就是对这段c#源代码的描述

        元数据有很多用途:其中有一条大家肯定晓得: Microsoft Visual Studio 用元数据帮助你写代码。“智能感知”(IntelliSense)技术会解析元数据,告诉你一个类型提供了那些方法、属性、事件和字段。对于方法,还能告诉你需要的参数

     托管模块可合并成为程序集

    程序集(assembly)是一个抽象概念:

    由一或者多个模块/资源文件的逻辑性组合。程序集是重用、安全性以及版本控制的最小单元。在CLR世界中,程序集相当于“组件”。托管模块合并程序集如下图

                                

        该图将 一些托管模块 与 一些资源文件 交给一个工具处理,生成一个PE32(+)文件,这些托管模块与资源文件合并到了一起,并多了一个清单(清单的作用类似于元数据对托管代码的作用)。

      

      执行程序集

          程序集同时包含 元数据与IL。IL是与CPU不相关的代码,不是机器语言,计算机无法运行,这个时候就需要强大的CLR了!

  • 相关阅读:
    第三次课堂总结--付胤
    作业二总结
    java数据结构——单链表、双端链表、双向链表(Linked List)
    java数据结构——队列、循环队列(Queue)
    java数据结构——栈(Stack)
    java数据结构——数组(Array)
    JSON Web Token的使用
    RSA加密、解密、公钥私钥生成
    数据库优化策略
    Socket和ServerSocket学习笔记
  • 原文地址:https://www.cnblogs.com/txqx/p/10570724.html
Copyright © 2020-2023  润新知