【读书笔记】【CLR via C#】【第一章】The CLR’s Execution Model
内容提要
本章的目的是对.Net 框架的设计做一个总体的介绍,包括介绍框架中使用的一些技术、定义一些术语。同时会展示从源代码生成应用程序(或者一些包含了一些自定义类型的可以发布的组件),并且会解释程序的运行机制。
包含以下子标题:
- 将源代码编译成托管的模块(Managed Modules)
- 将Managed Modules 组合成 Assemblie
- 加载 CLR
- 执行 Assembly 代码
- Native code 生成工具:NGen.exe
- .NET 框架类库 (Framework Class Library, FCL)
- The Common Type System (CTS)
- The Common Language Specification (CTS)
- 与非托管代码的互操作性
将源代码编译成托管模块(Managed Modules)
CLR是可以被不同的编程语言共同使用的运行时环境。实际上,在运行时,CLR并不知道程序是使用什么语言写的,因为这些语言都被预先编译成了Managed Module (IL 和 元数据)。不同语言的编译器,可以认为是不同的代码检查器,检查代码的语法是否正确,描述的操作是否合理等。
本地代码产生针对CPU的代码,而C#、F#等语言产生的是针对CLR的代码。
除了产生IL代码之外,所有针对CLR的编译器还会在每个托管模块中生成"元数据"(metadata)。简要来说,Metadata是用来描述module中定义了什么东西(例如类型以及类型的成员)的一组数据表。另外,Metadata还描述了Module中引用了哪些东西(比如外部载入的类型以及类型的成员)
PE32 or PE32+ header |
|
CLR header |
|
元数据(Metadata) |
|
IL代码 |
|
Metadata有很多用途,例如:
- 有了Metadata就不需要像C/C++头文件以及库文件的东西了,因为Metadata将引用模块所需要的信息存储在模块自身当中了,编译器可以从模块中之间提取这部分信息;
- Visual Studio中的智能输入提示也是通过处理Metadata中所包含的信息来帮助写代码的;
- CLR的代码验证过程使用Metadata来确保只进行了类型安全的操作;
- 实现序列化
- 是的垃圾回收器可以确定对象的生命周期,对任意对象,gc可以通过metadata知道这个对象的类型以及这个对象引用了哪些其他对象;
C#/F#/ILAsm 都是产生托管的代码和托管的类型。而Microsoft C++则默认产生native code,但是可以通过/clr 使其产生托管的module。Microsoft C++还是唯一一个可以允许开发这既使用托管代码又使用非托管代码并且将二者注入到同一个module中的编译器,所以常被利用来在托管项目中调用已有的非托管代码。
将Managed Modules 组合成 Assemblie
加载 CLR
执行 Assembly 代码
Native code 生成工具:NGen.exe
.NET 框架类库 (Framework Class Library, FCL)
The Common Type System (CTS)
The Common Language Specification (CTS)
与非托管代码的互操作性
【读书笔记】【CLR via C#】【第一章】The CLR’s Execution Model的更多相关文章
- [读书笔记]算法(Sedgewick著)·第一章(1)
到家放松放松之后就开始学习算法了,手里拿的是拿的是一本Robert Sedgewick的橙皮书<算法(第四版)>的.这本书与导论那本书的不同之处在于轻数学思想.重实现,也就是说这是一本很不 ...
- 读书笔记 - javascript 高级程序设计 - 第一章 简介
第一章 简介 诞生时间 1995 最初用途 客服端验证 第一版标准 注意是标准 1997年 Ecma-262 一个完整的js实现由三部分组成 ECMAScript DOM 文档对象模型 BO ...
- [读书笔记]算法(Sedgewick著)·第一章(2)
接着上一篇,mindmap更新如下内容. 3.背包.队列和栈 这节主要讲述了这三种数据结构(Bag.Queue.Stack)的API.实现以及链表.Queue和Stack还含有删除元素的方法.并引出了 ...
- 《深入浅出设计模式》读书笔记 C#版(第一章)
原始需求和设计 事情是这样开始的,公司需要做一套程序,鸭子,设计如下: 一个鸭子父类,多个派生类,三个可override的方法. 第一次需求变更 我们要会飞的鸭子!!!!! 所以我们做了如下的更改: ...
- unix环境高级编程-读书笔记与习题解答-第一篇
从这周开始逐渐的进入学习状态,每天晚上都会坚持写c程序,并且伴随对这本书的深入,希望能写出更高质量的读书笔记和程序. 本书的第一章,介绍了一些关于unix的基础知识,在这里我不想去讨论linux到底是 ...
- Unity Shader入门精要读书笔记(一)序章
本系列的博文是笔者读<Unity Shader入门精要>的读书笔记,这本书的章节框架是: 第一章:着手准备. 第二章:GPU流水线. 第三章:Shader基本语法. 第四章:Shader数 ...
- The Art of Multiprocessor Programming读书笔记 (更新至第3章)
这份笔记是我2013年下半年以来读“The Art of Multiprocessor Programming”这本书的读书笔记.目前有关共享内存并发同步相关的书籍并不多,但是学术文献却不少,跨越的时 ...
- C++ Primer读书笔记(一)第一篇:C++概述,第一章:开始
1. 主要内容 介绍程序语言的核心思想和C++的基本概念. 印象比较深刻的就是分而治之(divide and conque)的分解思想. 2. 知识广场 1) C++ 文件后缀 cc, cpp,,cx ...
- 嵌入式学习笔记(综合提高篇 第一章) -- 利用串口点亮/关闭LED灯
1 前言 从踏入嵌入式行业到现在已经过去了4年多,参与开发过的产品不少,有交换机.光端机以及光纤收发器,停车场出入缴费系统,二维码扫码枪,智能指纹锁以及数字IC芯片开发等; 涉及产品中中既有 ...
- [读书笔记]算法(Sedgewick著)·第二章.初级排序算法
本章开始学习排序算法 1.初级排序算法 先从选择排序和插入排序这两个简单的算法开始学习排序算法.选择排序就是依次找到当前数组中最小的元素,将其和第一个元素交换位置,直到整个数组有序. public s ...
随机推荐
- jQuery ajax传递特殊字符参数(例如+)
使用jQuery ajax向后台传递参数para=1+1时后台接收到的参数为para=1 1,解决方案是 使用json传递,代码如下. var url = "/test/check" ...
- js_面向对象编程
主要内容 值类型与引用类型的特征 深拷贝与浅拷贝 对象的动态特性 构造函数的执行过程 异常处理 dom操作(略) <!DOCTYPE html> <html> <head ...
- hdu 4634 Swipe Bo 搜索
典型的bfs模拟 (广度优先搜索) ,不过有好多细节要注意,比如图中如果是 R# 走到这个R的话就无限往右走了,这样就挂了~肯定到不了出口.还有一种容易造成死循环的,比如 #E## DLLL D. ...
- PreferenceActivity的使用
PreferenceActivity是一个非常有用的基类,当我们开发Android项目时避免不了选项设置,这些设置习惯用Preference来保存.Android专门为这种Activity提供了便捷的 ...
- Android开发之使用意图调用内置应用程序
意图可以调用活动,也常被用来调用内置应用程序,如加载web页面,拨号页面,内置地图应用等等.下面就用例子来说明该用法. 效果图如下: 实现代码如下: 上图中的启动MyBrowser是用意图来调用MyW ...
- Java基础知识强化之IO流笔记25:FileInputStream / FileOutputStream 复制图片案例
1. 需求:把D:\\美女.jpg 复制到当前项目目录下mn.jpg 代码示例: package com.himi.filecopy; import java.io.FileInputStream; ...
- iOS UIKit:CollectionView之布局(2)
Collection view使用UICollectionViewFlowLayout对象来管理section中的cell,该对象是一种流布局方式,即在collection view中的section ...
- 两种隐藏元素方式【display: none】和【visibility: hidden】的区别
此随笔的灵感来源于上周的一个面试,在谈到隐藏元素的时候,面试官突然问我[display: none]和[visibility: hidden]的区别,我当时一愣,这俩有区别吗,好像有,但是忘记了啊,因 ...
- javascript创建对象的7种方式
/*1.工厂模式*/ function createPerson(name,age,job) { var o = new object(); o.name = name; o.age = age; o ...
- CodeSmith中SchemaExplorer属性的介绍
CodeSmith与数据库的联系,在CodeSmith中自带一个程序集SchemaExplorer.dll,这个程序集中的类主要用于获取数据库中各种对象的结构. <%@ Property Nam ...