《CLR.via.C#第三版》第一部分读书笔记(一)

最近开始仔细研读《CLR.via.C#第三版》这本书。读pdf文档确实很累。建议有条件的朋友还是买书看吧。

我的笔记用来记录我对这本书的理解,简化下逻辑,对每个部分我觉得是要点的进行归纳总结。特别基础的东西不会做过多的阐述。

第一部分讲的是CLR基础。

首先还是重新说下CLR的概念:“CLR 是一个可由多种编程语言使用的“运行时”。可用任何编程语言来开发代码,只要编译器是面向CLR的就可以了”。这里要重新解释下“只要编译器是面向CLR的就可以了”这句话。初学者一般不认同.net平台跨语言,或者说所谓的“跨语言”是在微软推出的范围内的语言。这个认识其实是错误的。任何语言都可以面向CLR来创建自己的编译器。我们熟知的Iron Ruby、Perl、PHP都有面向CLR的编译器。图1-1展示了编译源代码文件的过程。

比较重要的认知是CLR实际不和托管模块一起工作,而是和程序集一起工作。程序集包含了托管模块和资源文件等其它文件。

IL(中间语言)可以使用汇编语言来写。CLR中的JIT(just in time)也叫即时编译器,里面有个函数JITComplier(),此函数的职责是把要执行的方法的IL转换成本地CPU指令。

类中方法的调用过程:

一个方法执行的时候总的来说会被调用两次。(这里暂定方法名为Test())

第一次调用:

JITCompiler()会把Test()方法的IL代码编译成本地CPU指令(此指令会被保存到一个动态分配的内存块中),Test()方法在内存块中会通过JITComplier执行一遍(包括查找方法的IL,验证方法的IL,编译,执行)。

第二次调用:

完全跳过JITCompiler(),Test()方法在内存中再执行一遍。

两次执行的过程如图1-4,1-5所示:

需要注意的是本地CPU指令是存储到动态内存中的,一旦程序终止,本地CPU指令将会被丢弃。

Debug版本和Release版本的区别本质上是IL代码质量和JIT本地代码质量是否经过优化。从性能上考虑,程序部署、发布,最好是用Release版本。

这个部分还有程序打包、部署、程序集信息等内容。这里就不阐述了。

时间: 2024-10-13 00:08:09

《CLR.via.C#第三版》第一部分读书笔记(一)的相关文章

《JavaScript高级程序设计(第三版)》读书笔记

第二章 在HTML中使用JS 一般把<script>便签放在body的后面,当然也可以用defer=defer然后放在head里面也能延迟执行(不同的是立即下载好了),但是只能对外部脚本适用,而且只能用一次.例如: <script type="text/javascript" src="exampler.js"></script> <script type="text/javascript" defer=

Java 线程第三版 第一章Thread导论、 第二章Thread的创建与管理读书笔记

第一章 Thread导论 为何要用Thread ? 非阻塞I/O I/O多路技术 轮询(polling) 信号 警告(Alarm)和定时器(Timer) 独立的任务(Task) 并行算法 第二章 Thread的创建与管理 一.什么是Thread ? Thread是所在主机执行的应用程序任务(task). 只有一个线程的例子: public class Factorial { public static void main(String[] args) { int n = 5; System.ou

Java 线程第三版 第三章数据同步 读书笔记

多线程间共享数据问题 一.Synchronized关键字 atomic一词与"原子"无关,它曾经被认为是物质的最小的单元,不能再被拆解成更小的部分. 当一个方法被声明成synchronized,要执行此方法的thread必须先取得一个token,我们将它称为锁.一旦该方法取得(或者说是获得)锁,它将运行此方法然后释放掉(或者返回)此锁.不管方法时怎样返回的(包括通过异常)该锁会被释放. 二.Volatile关键字 如果变量被标示为volatile,每次使用该变量时都必须从主寄存器中读出

第一周读书笔记《构建之法》

构建之法读书笔记 #wmd-preview h1 { color: #0077bb } 构建之法读书笔记 沈三景 PB15061249 软件工程 读书笔记 前言 开学前两周,杂事颇多,没有充足的时间阅读<构建之法>,只能每天在睡前阅读约半小时,故只看了前三章.虽如此,但仍收获很多,下面就是我对前四章内容的一些看法和理解,如有理解偏颇之处,望见谅. 第一章 概论 本章主要介绍了软件工程是什么?软件工程的目标是什么?为了解决前一个问题,作者首先提出了两个等式: 程序 = 数据结构 + 算法 软件

《内核设计与实现》第一章读书笔记

<内核设计与实现>第一章读书笔记 第一章:Linux内核简介 1.1 Unix的历史 Unix强大的特点 A.简洁,几百个系统调用,明确的设计目的 B.文件对待所有东西 C.移植性强(C语言) D.进程创建快,使用fork()系统调用. E.进程间通信元语,进程间通信机制 1.2 linux的简介 Linux系统的基础是内核.C库.工具库和系统的基本工具. 1.3 操作系统和内核简介 内核:管理者,操作系统的核心 通常一个内核由负责响应中断的中断服务程序和网络.进程间通信等系统服务共同组成.

《Java: The Complete Reference》《Java 8 编程参考官方教程(第9版)》读书笔记

春节期间读了下<Java: The Complete Reference>发现这本书写的深入浅出,我想一个问题,书中很多内容我们也知道,但是为什么我们就写不出这样一本书,这么全面,这么系统,这么简单易懂.不得不佩服Herbert Schildt的编程功底,需要提到的是Herbert Schildt写了很多Java和C.C++的书,他是C.C++.Java和C#编程语言的权威,是ANSI/ISO组织C语言标准化委员会的委员. Herbert Schildt最新的基本Java著作其实都差不多,在内

perl简洁编程,《Perl语言入门(第五版)》读书笔记

整理一下好多年前放在hi.baidu上的笔记! perl简洁编程,<Perl语言入门(第五版)>读书笔记20110316! 书很早就买了,简单翻翻就扔下了!最近买了ipad,良好的阅读体验,用来看书,感觉书又能看进去了!不能白看一遍,整理一下阅读笔记! Perl的程序竟能如此简洁!!! sub division  {     $_[0]/$_[1]; } $_即为接收的数组,同时数据运算后,直接返回,省略了return. sub max {    my($max_so_far)  =  shi

6 Specialzed layers 特殊层 第一部分 读书笔记

6?Specialzed?layers 特殊层? 第一部分 ?读书笔记 ? Specialization is a feature of every complex organization. 专注是每个复杂系统的特性 Catharine R. Stimpson ? Up to this point, we have been working with the?CALayer?class, and we have seen that it has some useful image drawin

《CLR.via.C#第三版》第二部分第8,9章节读书笔记(四)

三种类型的构造方法: 实例构造器(引用类型):实例构造器永远不能被继承(所以方法前没有修饰符):如果类的修饰符为static(sealed和abstract),编译器根本不会在类的定义中生成一个默认构造器. 重要认知:为了使代码“可验证”,类的实例构造器在访问从基类继承的任何字段之前,必须先调用基类的构造器.如果派生类的构造器没有显示调用一个基类构造器,C#编译器会自动生成对默认的基类构造器的调用. 在类中声明的字段,实际在编译器中是转换成构造器中的代码执行初始化.如果一个类中有3个字段,3个构