1.1将源代码编译成托管模块

每个面向CLR的编译器生成的都是IL(中间语言)代码,或称为托管代码,因为CLR管理它执行;另外编译器还要在每个托管模块中生成完整的元数据,元数据是一组数据表,一些数据表描述模块中定义的内容,比如类型及其成员。还有一些元数据表描述了托管模块引用的内容,比如导入的类型及其成员。

元数据作用:1.编译后可以解析元数据,才有“智能感知”。2.将对象属性序列化和反序列化。

注:CLR(Common Language Runtime)公共语言运行时 核心功能:内存管理、程序集加载、安全性、异常处理、线程同步

1.2将托管模块合并成程序集

清单是有一个或多个元数据表构成的集合,描述构成程序集的文件。

程序集是一个或多个模块/资源文件的逻辑分组。“程序集”可以将一组文件当作一个实体来对待。

1.3加载公共语言运行时

生成的程序集可以是exe文件或dll文件,最终由CLR管理执行。

1.4执行程序集的代码
可以将IL看作是一种面向对象的机器语言。
执行一个方法:IL -> CPU指令(由CLR的JIT just-in-time即使编译器的来转换)

Main方法执行前,CLR检测出Main代码引用的所有类型,分配一个内部数据结构来管理对所引用类型的访问。上图中内部结构中,Console类型定义的每个方法都有一个对应的记录项,每个记录都容纳了一个地址,根据地址可以找到方法的实现。

对这个结构进行初始化时,CLR将每个记录项都设置成(指向)包含在CLR内部的一个未文档化的函数(JITCompiler)。

Main方法首次调用WriteLine时,JITCompiler函数会被调用。JITCompiler函数负责将一个方法的IL代码编译成本地CPU指令。

JITCompiler
函数被调用时,它知道要调用的是哪个方法,以及具体是什么类型定义了该方法。然后,JITCompiler会在定义(该类型的)程序集的元数据中查找被调
用的方法的IL。接着,JITCompiler验证IL代码,并将IL代码编译成本地CPU指令。本地CPU指令被保存到一个动态分配的内存块中。然
后,JITCompiler返回CLR为类型创建的内部数据结构,找到与被调用的方法对应的那一条记录,修改最初对JITCompiler的引用,让它指
向内存块中的代码。这些代码正是WriteLine方法(获取String参数的那个)的具体实现。这些代码执行完毕并返回时,会返回到Main中的代
码,并像往常一样继续执行。

个人简化理解:CLR
检查方法中引用的类型,分配一个内部数据结构来保存对类型的访问,类型中定义的方法对应一个记录,记录指向CLR内部函数JITCompiler,方法调
用后对应的JITCompiler开始执行,找到程序集元数据中方法的IL,验证IL,转换为CPU指令并保存到动态内存中,将记录修改指向这个内存中的
代码,执行代码,返回,程序继续往下执行...

1.6 Framework类库
.NET Framework中包含了Framework类库(Framework Class Library,FCL),FCL是一组DLL程序集的统称。

1.7通用类型系统
微软制定的正式类型规范:Common Type System,CTS 它描述了类型的定义和行为。
方法签名:是否有返回值,返回值的类型;参数的类型、数量及顺序。

1.8公共语言规范
公共语言规范(Common Language Specification, CLS),任何编译器生成的类型想兼容于其他“符合CLS、面向CLR的语言”所生成的组件,就必须支持这个最小功能集。允许一种语言中使用由另一种语言创建的对象。

第一部分 CLR基础:第1章 CLR的执行模型的更多相关文章

  1. 第一模块·开发基础-第1章 Python基础语法

    Python开发工具课前预习 01 Python全栈开发课程介绍1 02 Python全栈开发课程介绍2 03 Python全栈开发课程介绍3 04 编程语言介绍(一) 05 编程语言介绍(二)机器语 ...

  2. 第一部分 CLR基础:第3章 共享程序集和强命名程序集

    第一部分 CLR基础:第3章 共享程序集和强命名程序集

  3. 第一章 CLR 的执行模型

    CLR via C# 读书笔记:第一章 CLR 的执行模型(1) 第Ⅰ部分CLR基础.这部分为三章(第一章:CLR的只想能够模型,第二章:生成.打包.部署和管理应用程序及类型,第三章:共享程序集和强命 ...

  4. 第一章 CLR执行模型

    发现看过好几遍还是会忘记,因水平有限理解的不是很到位.欢迎各位大神及时指正. CLR执行模型 1.1编译器将源代码编译成托管模块 托管模块:是标准的windows可移植执行体文件(PE32(32位机器 ...

  5. CLR基础之一---认识CLR [《CLR via C#》读书笔记]

    <CLR via C#>读书笔记 什么是CLR CLR的基本概念 通用语言运行平台(Common Language Runtime,简称CLR)是微软为他们的.Net虚拟机所选用的名称.这 ...

  6. Windbg CLR基础小测 《第六篇》

    首先写一段代码如下: namespace ConsoleApplication3 { class Program { static void Main(string[] args) { Console ...

  7. 01.由浅入深学习.NET CLR 基础系列之CLR 的执行模型

    .Net 从代码生成到执行,这中间的一些列过程是一个有别于其他的新技术新概念,那么这是一个什么样的过程呢,有什么样的机制呢,清楚了这些基本的东西我们做.Net的东西方可心中有数.那么,CLR的执行模型 ...

  8. 第1章 CLR的执行模型

    1.1将源代码编译成托管代码模块

  9. 第22章 CLR寄宿和AppDomain

    22.1 CLR寄宿 CLR Hosting(CLR 宿主)的概念:初始启动.Net Application时,Windows进程的执行和初始化跟传统的Win32程序是一样的,执行的还是非托管代码,只 ...

  10. CLR基础,CLR运行过程,使用dos命令创建、编译、运行C#文件,查看IL代码

    CLR是Common Language Runtime的缩写,是.NET程序集或可执行程序运行的一个虚拟环境.CLR用于管理托管代码,但是它本身是由非托管代码编写的,并不是一个包含了托管代码的程序集, ...

随机推荐

  1. gcc makefile

    $* 不包含扩展名的目标文件名称 $< 第一个依赖文件名称 $? 所有时间戳比目标文件晚的依赖文件 $@ 目标文件完整名称 $^ 所有不重复的依赖文件

  2. 【收藏用】--切勿转载Java处理XML的三种主流技术及介绍

    原帖地址 : http://www.ibm.com/developerworks/cn/xml/dm-1208gub/ XML (eXtensible Markup Language) 意为可扩展标记 ...

  3. jps命令

    转载:http://blog.csdn.net/wanglha/article/details/40181701 ps -- JavaVirtual Machine Process Status To ...

  4. [Flex] PopUpButton系列 —— 弹出菜单的行高设置

    <?xml version="1.0" encoding="utf-8"?> <!--Flex中如何通过variableRowHeight样式 ...

  5. C# Winform常见的Editor

    常见Editor: 1)ArrayEditor,继承自CollectionEditor 2)BinaryEditor 3)CollectionEditor 4)DateTimeEditor 5)Mul ...

  6. javaSE学习博客与笔记

    equals和==的区别 Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,do ...

  7. WIN7上搭建Windows Phone 8 开发环境——VMware Workstation下Win8 “无法安装Hyper-V, 某个虚拟机监控程序正在运行”问题解决的办法

    最近在试着在Windows 7上搭建Windows Phone 8的开发调试环境,使用的是VMware Workstation + Win8 Pro的虚拟环境, 在漫长的WPexpress_full下 ...

  8. Log4日志配置及使用

    1.log4j.xml <?xml version="1.0" encoding="gb2312" ?> <!DOCTYPE log4j:co ...

  9. FileSystem实例化过程

    HDFS案例代码 Configuration configuration = new Configuration(); FileSystem fileSystem = FileSystem.get(n ...

  10. Fegla and the Bed Bugs 二分

    Fegla and the Bed Bugs Fegla, also known as mmaw, is coaching a lot of teams. All these teams train ...