zoukankan      html  css  js  c++  java
  • C# CLR简介

    C# CLR简介

        (一)CLR介绍

        CLR是一个可以由多编程语言使用的运行时,

    CLR的核心功能:

       内存管理,

       程序集加载,

       安全性,

       异常处理,

        线程同步等等。

    可以被很多属于微软系列的开发语言使用。

        事实上,在运行时,CLR根本不关心开发运用什么语言编写源代码,这意味着选择编程语言的时候,应该选择最容易表达自己意图的语言。只要编译器是面向CLR的即可。

        那为毛微软还推出C#,F#,VB等等呢,事实上,可以将编译器视为语法检查器和正确的代码分析器。他们检查源代码,确定你写的一切都有意义,并输出对你意图进行描述的代码,不用编程语言之间可以采用不同的y发来开发。微软帮助我们创建了很多个面向CLR的语言编译器,其中包含:C#,C++,F#等等。以及一个中间语言汇编器。

      (二)托管模块

       托管模块:其实CLR拿到了我们的源代码,然后用对应的编译器检查和分析代码,结果都是托管模块,不是直接生成程序集的。托管模块是标准的Windows PE可移值的执行体(PE32文件或32+文件)

    托管模块的组成部分有:PE32头部分或PE32+头部分,CLR头,元数据,IL中间语言代码。

       2.1PE32或PE32+头部分

       这个就是我们平时所说的32位程序,或者还是64位程序,就在这里运行的,相信大家都知道vs编译器里面有这个(看下图),其实里面主要就是包含这个东西。其实我们一般的程序选择的平台都是Any CPU,因为我们平时写的程序都是只包含类型安全的托管代码。但是在有些时候,或者要面向一种功能特定的CPU架构的非托管代码互操作的时候。可能就是需要选择其他平台了。

        2.2 CLR头

        包含使这个模块成为托管模块的信息(可以有CLR和一些使用程序进行介绍),说白了这个就是让我们的CLR能够认识它。

        2.3 元数据

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

       2.4 IL中间语言

        编译器编译源代码生成的代码。

        (三) 程序集

        CLR其实不是和模块工作的,他是和程序集工作的。编译器会将默认生成的托管模块转换为程序集。啥叫程序集呢:简单通俗的讲,程序集就是把IL代码和元数据以及一些资源文件,通过C#编译器,程序集链接器组装而成。生成程序集之后,它有一张清单,告诉我们这个东西有哪些组成。程序集还有一个很重要的地方就是自描述:就是说程序集包含它引用的程序集相关信息,有了这些信息之后呢,CLR可以判断出程序集的直接依赖对象是什么,不需要在注册表里面保存额外的信息。就是因为这个特点,所以程序集部署非常容易。

  • 相关阅读:
    BF算法和KMP算法
    Python课程笔记 (五)
    0268. Missing Number (E)
    0009. Palindrome Number (E)
    0008. String to Integer (atoi) (M)
    0213. House Robber II (M)
    0198. House Robber (E)
    0187. Repeated DNA Sequences (M)
    0007. Reverse Integer (E)
    0006. ZigZag Conversion (M)
  • 原文地址:https://www.cnblogs.com/grj001/p/12224697.html
Copyright © 2011-2022 走看看