1. 概述

   本章主要是介绍从源代码到可执行程序的过程中,CLR所做的工作。

2. 名词解释

  ① 公共语言运行时(Common Language Runtime, CLR),是一个可由多种语言使用的 运行时,核心功能(内存管理、程序集加载、安全性、异常处理和线程同步)可由面向CLR的所有语言使用。

  ② PE32:32位 Microsoft Windows 可移植执行体。

      PE32+:64位 Microsoft Windows 可移植执行体。

  ③ 元数据 是一组数据表,这些数据表描述了 模块中定义的内容 或者 托管模块引用的内容。

  ④ 托管模块 是一个标准的PE32或者PE32+文件,他们都需要CLR才能执行。由 PE32(+)头、CLR头、元数据 及 IL中间代码 组成。

  ⑤ 程序集 是一个或多个模块/资源文件的逻辑性分组,是重用、安全性以及版本控制的最小单元。

  ⑥ 清单(manifest) 是由 元数据表 构成的另一种集合,描述了构成程序集的文件。

  ⑦ 本地代码生成器(NGen.exe),将IL代码编译成本地代码。

  ⑧ Framework类库(FCL),Microsoft发布的一组DLL程序集的统称。

  ⑨ 通用类型系统(Common Type System, CTS):Microsoft制定的,描述类型定义和行为的规范。

  ⑩ 公共语言规范(Common Language Specification, CLS): 定义了一个最小功能集。任何编译器生成的类型要想兼容于由其他“符合CLS、面向CLR“的语言所生成的组件,就必须支持这个功能集。

3. 执行过程

  ① 将源代码编译成托管模块。

  ② 将托管模块合并成程序集。(程序集链接器AL.exe)

  ③ 加载公共语言运行时。

  ④ 执行程序集的代码。

    CLR的JIT(just-in-time)编译器将IL转换成本地cpu指令。

    一次编译,多次运行。期间进行代码优化。

  ⑤ 与非托管代码的互操作性。

4. 总结

  介绍CLR相关的各个部分,概述CLR的执行逻辑。

第一章、 CLR的执行模型的更多相关文章

  1. 第一章 CLR 的执行模型

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

  2. 第一章 CLR的执行模型

    编译器将源代码编译为托管模块.托管木块包含: PE32或PE32+头 CLR头 元数据 IL(中间语言)代码 PE32头的文件可在32或64位的电脑上运行,PE32+的只能在64上运行.Window6 ...

  3. 第一部分 CLR基础:第1章 CLR的执行模型

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

  4. 第1章 CLR的执行模型

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

  5. CLR 的执行模型(2)

    第一章 CLR 的执行模型(2) 本篇内容大纲 Framework 类库(Framework Class Library , FCL) 通用类型系统(Common Type System,CTS) 公 ...

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

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

  7. 第一章 CLR执行模型

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

  8. 【C#进阶系列】01 CLR的执行模型——一个Hello World的故事

    好吧,废话少说,先上一章Hello World图: 我们有了一个Hello world程序,如此之简单,再加上我今天没有用汉字编程o(>﹏<)o,所以一切很简单明了. 故事开始: 编译: ...

  9. 第一章 Java代码执行流程

    说明:本文主要参考自<分布式Java应用:基础与实践> 1.Java代码执行流程 第一步:*.java-->*.class(编译期) 第二步:从*.class文件将其中的内容加载到内 ...

随机推荐

  1. xunit inlinedata classdata memberdata

    https://andrewlock.net/creating-parameterised-tests-in-xunit-with-inlinedata-classdata-and-memberdat ...

  2. 一步一步学Silverlight 2系列(19):如何在Silverlight中与HTML DOM交互(上)

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  3. 基于jQuery仿淘宝产品图片放大镜特效

    在开发商城的时候,往往会用到图片的放大功能,这里把自己在近期项目中使用的放大镜特效做一下总结(非插件). 放大镜效果 常用的js组件jquery.imagezoom,jquery.jqzoom,jqu ...

  4. Flask log配置,实现按照日期自动生成日志文件

    Flask自带了logger模块,用来方便程序员群众记录日志,这里粘贴出来的是一段代码,用来初始化日志各项配置参数,并根据日期自动生成日志文件. #log配置,实现日志自动按日期生成日志文件def m ...

  5. Eclipse的maven工程不小心移除了Maven Dependencies,如何添加回来?

    转自:https://blog.csdn.net/eininotop/article/details/71124533 选择该工程--> 点击右键--> 选择Properties--> ...

  6. 6-5 Haar特征2

    在遍历的过程中还需要考虑到一个步长的问题.这个模板一次滑动10个像素,那么总共就需要滑动9次.再加上最开始的第0次,合计在水平方向上和竖直方向上分别都有10个这样的模板,总共也就是100个模板.要计算 ...

  7. servlet 3 文件上传

    1.up.jsp <%@ page language="java" pageEncoding="utf-8"%> <form action=& ...

  8. k8s-StatefulSet控制器-十四

    一.StatefulSet概述 RC.Deployment.DaemonSet都是面向无状态的服务,它们所管理的Pod的IP.名字,启停顺序等都是随机的,而StatefulSet管理所有有状态的服务, ...

  9. 019--python内置函数

    一.内置高阶函数 map函数:接收两个数据 函数和序列,map()将函数调用'映射'到序列身上,并返回一个含有所有返回值的一个列表 num1 = [1,2,3,4,5] num2 = [5,4,3,2 ...

  10. 005--linux基础一作业

    1.最小化安装centos7操作系统 2.新增硬盘分两个分区,两个分区的文件系统依次为ext4和xfs 3.将两个文件系统分别挂在到/mnt和/opt目录 4.新增普通用户egon并采用无需重复确认的 ...