(一)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可以判断出程序集的直接依赖对象是什么,不需要在注册表里面保存额外的信息。就是因为这个特点,所以程序集部署非常容易。

C# CLR简介的更多相关文章

  1. CLR简介(一)

    什么是通用语言运行时(CLR),简单来讲: CLR是一个支持多种编程语言及多语言互操作,完整的高级虚拟机. 有点拗口,而且不是很有启发性,但上面的文字是将又大又复杂的CLR的功能归类以便容易理解的第一 ...

  2. .NET Framework (代码库、通用类型系统CTS、CLR) 简介

    编译C#————>程序集(.exe..dll[MSIL]).元信息[数据信息].可选资源[图片.声音]) |                     | |                   ...

  3. CLR 简介

    (一)CLR介绍 CLR是一个可以由多编程语言使用的运行时,CLR的核心功能:内存管理,程序集加载,安全性,异常处理,线程同步等等.可以被很多属于微软系列的开发语言使用. 事实上,在运行时,CLR根本 ...

  4. MFC,ATL,CLR简介

    MFC.ATL和CLR是VC2005内置的3大库,涵盖了windows的各种开发方法和开发应用.当然关于 C++ 开发的库不止这3个,不过这3个是微软推荐.从编程所处层次而言,WIN32为最底层,其次 ...

  5. 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_CLR

    1.CLR简介 全称:Common Language Runtime(公共语言进行时) 属性:一种托管模块 使用对象:面向CLR的所有语言(C#.Basic.IL...) 核心功能:内存管理.程序集加 ...

  6. .NET6 平台系列3 .NET CLR 详解

    系列目录     [已更新最新开发文章,点击查看详细] CLR 简介 运行时(Runtime Environment,简称Runtime ),是指那些支持在特定的平台上,用于运行特定编程语言编写的软件 ...

  7. Visual C++2010开发权威指南 中文高清PDF - VC.NET

    第一部分  Visual C++ 2010开发与新特性第1章  Visual C++ 2010开发环境简介 11.1  Visual C++ 2010简介 11.2  Visual C++ 2010下 ...

  8. 数组和CLR-非常特殊的关系

    目录 数组和CLR-非常特殊的关系 公共语言运行时(CLR)的基础 内存和类型安全 实现细节 特殊帮助器类 移除边界检查 分配数组 运行时以不同的方式对待数组 进一步阅读 数组源码引用 参考文档 数组 ...

  9. 公共语言运行库(CLR)开发系列课程(1):Pinvoke 简介 学习笔记

    前言 让拖管代码对象和非托管对象协同工作的过程称为互用性(Interoperability),通常简称为 Interop. P/Invoke在托管代码与非托管代码交互式时产生一个事务(Transiti ...

随机推荐

  1. BAT经典面试题之redis的热KEY问题怎么解决

    引言 讲了几天的数据库系列的文章,大家一定看烦了,其实还没讲完...(以下省略一万字).今天我们换换口味,来写redis方面的内容,谈谈热key问题如何解决.其实热key问题说来也很简单,就是瞬间有几 ...

  2. 多线程概述(好处和弊端)(jvm多线程解析、主线程运行示例)

    1 package multithread; 2 3 /* 4 * 进程:正在进行中的程序(直译). 5 * 6 * 线程:就是进程中一个负责程序执行的控制单元(执行路径). 7 * 一个进程中可以多 ...

  3. 从服务端生成Excel电子表格(Node.js+SpreadJS)

    Node.js是一个基于Chrome V8引擎的JavaScript运行环境,通常用于创建网络应用程序.它可以同时处理多个连接,并且不像其他大多数模型那样依赖线程. 对于 Web 开发者来说,从数据库 ...

  4. SpringBoot+Minio搭建不再爆肝秃头的分布式文件服务器

    前言 1).有人一定会问,为什么不用FastDFS?众所周知,FastDFS的原生安装非常复杂,有过安装经验的人大体都明白,虽然可以利用别人做好的docker直接安装,但真正使用过程中也可能出现许多莫 ...

  5. 中文分词,自然语言处理器NLP。 新版本已上线,增加二级行业分类。

    一  cacl2新版本上线,在一级行业的基础上深度挖掘,新增了对应的二级分类. 可以查看一级行业[农林牧渔],下面对应的所有二级行业的词库.这里拿[林业]来观察效果. 具体分词的效果. 二    Gi ...

  6. Codeforces Round #746 Div. 2

    掉分快乐qwq C题代码以及分析(在注释里) /* * @Author: Nan97 * @Date: 2021-10-04 22:37:18 * @Last Modified by: Nan97 * ...

  7. Objects、Arrays、Collectors、System工具类

    Objects类 定义 位于java.util包中,JDK1.7以后操作对象的类,对对象的空,对象是否相等进行判断. 常用方法 1.public static boolean equals(Objec ...

  8. JVM学习九-(复习)HotSpot 垃圾收集器

    HotSpot 虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,虽然我们要对各个收集器进行比较,但并非为了挑选出一个最好的收集器.我们选择的只是对具体应用最合适的收集器. 新生代垃圾收集器 Se ...

  9. curl 查看接口的网络分段响应时间

    示例如下 curl -o /dev/null -s -w %{time_namelookup}::%{time_connect}::%{time_starttransfer}::%{time_tota ...

  10. getter/setter方法

    1.setter方法 作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值 命名规范: 必须是对象方法 返回值类型为void 方法名必须以set开头,而且后面跟上成员变量名去掉"_&q ...