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可以判断出程序集的直接依赖对象是什么,不需要在注册表里面保存额外的信息。就是因为这个特点,所以程序集部署非常容易。
CLR 简介的更多相关文章
- CLR简介(一)
什么是通用语言运行时(CLR),简单来讲: CLR是一个支持多种编程语言及多语言互操作,完整的高级虚拟机. 有点拗口,而且不是很有启发性,但上面的文字是将又大又复杂的CLR的功能归类以便容易理解的第一 ...
- .NET Framework (代码库、通用类型系统CTS、CLR) 简介
编译C#————>程序集(.exe..dll[MSIL]).元信息[数据信息].可选资源[图片.声音]) | | | ...
- MFC,ATL,CLR简介
MFC.ATL和CLR是VC2005内置的3大库,涵盖了windows的各种开发方法和开发应用.当然关于 C++ 开发的库不止这3个,不过这3个是微软推荐.从编程所处层次而言,WIN32为最底层,其次 ...
- C# CLR简介
(一)CLR介绍 CLR是一个可以由多编程语言使用的运行时,CLR的核心功能:内存管理,程序集加载,安全性,异常处理,线程同步等等.可以被很多属于微软系列的开发语言使用. 事实上,在运行时,CLR根 ...
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_CLR
1.CLR简介 全称:Common Language Runtime(公共语言进行时) 属性:一种托管模块 使用对象:面向CLR的所有语言(C#.Basic.IL...) 核心功能:内存管理.程序集加 ...
- .NET6 平台系列3 .NET CLR 详解
系列目录 [已更新最新开发文章,点击查看详细] CLR 简介 运行时(Runtime Environment,简称Runtime ),是指那些支持在特定的平台上,用于运行特定编程语言编写的软件 ...
- Visual C++2010开发权威指南 中文高清PDF - VC.NET
第一部分 Visual C++ 2010开发与新特性第1章 Visual C++ 2010开发环境简介 11.1 Visual C++ 2010简介 11.2 Visual C++ 2010下 ...
- 数组和CLR-非常特殊的关系
目录 数组和CLR-非常特殊的关系 公共语言运行时(CLR)的基础 内存和类型安全 实现细节 特殊帮助器类 移除边界检查 分配数组 运行时以不同的方式对待数组 进一步阅读 数组源码引用 参考文档 数组 ...
- 公共语言运行库(CLR)开发系列课程(1):Pinvoke 简介 学习笔记
前言 让拖管代码对象和非托管对象协同工作的过程称为互用性(Interoperability),通常简称为 Interop. P/Invoke在托管代码与非托管代码交互式时产生一个事务(Transiti ...
随机推荐
- php iconv 函数参数的区别
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/57 用户输入:英特尔® 酷睿™ i7处理器大显身手 case1 ...
- Spark源码剖析(五):Master原理与源码剖析(下)
一. 状态改变机制源码分析 在剖析Master核心的资源调度算法之前,让我们先来看看Master的状态改变机制. Driver状态改变 可以看出,一旦Driver状态发生改变,基本没有好事情,后果要 ...
- Time Complexity of Loop with Powers
以下功能的时间复杂度是多少? void fun(int n, int k) { for (int i=1; i<=n; i++) { int p = pow(i, k); for (int j= ...
- touchstart和touchend事件
touchstart和touchend事件 移动互联网是未来的发展趋势,现在国内很多互联网大佬都在争取移动这一块大饼,如微信及支付宝是目前比较成功的例子,当然还有各种APP和web运用. 由于公司的需 ...
- form表单与后台请求的关系
开发中遇到一个问题,说这个问题前先看一下代码 后台方面, get请求: post请求: 前端方面: 问题是:当我点击提交表单后,页面会跳转成这样: 经过多番测试,原因竟是form表单的提交问题,如果用 ...
- ES6 Proxy和Reflect (上)
Proxy概述 Proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种"元编程"(meta programming),即对编程语言进行编程. Proxy可以理 ...
- github emoji 表情列表
最新emoji大全:emoji列表 emoji-list emoji表情列表 目录 人物 自然 事物 地点 符号 人物 :bowtie: :bowtie:
- Struts2-整理笔记(五)拦截器、拦截器配置
拦截器(Interceptor) 拦截器是Struts2最强大的特性之一,它是一种可以让用户在Action执行之前和Result执行之后进行一些功能处理的机制. 拦截器的优点 简化了Action的实现 ...
- 物联网细分领域-车联网(OBD)市场分析
前言: 这段时间在跟一个车联网的项目,所以做了一些研究. OBD概述 OBD是英文On-Board Diagnostic的缩写,中文翻译为"车载诊断系统".这个系统随时监控发动机的 ...
- thinkinginjava学习笔记04_初始化与清理
java沿用了c++的构造器,使用一个和类名完全一样的方法作为类的构造器,可以有多个构造器来通过不同的参数进行构造,称为重载:不仅是构造器可以重载,其他方法也一样通过不同的形参以及不同的返回值来实现重 ...