1.char在C#中为16位Unicode字符;int 映射到System.Int32;long映射到System.Int64。

2.重载时C#不考虑返回值,而CLR允许返回值不同,方法名和参数相同的重载。

3.callvirt调用方法时会验证变量是否为NULL,如果是则无法判断变量的实际类型从而抛出异常,因此callvirt执行速度比call慢。对于引用类型,C#编译器通常使用call调用静态方法,使用callvirt调用实例方法和虚方法(在重载方法中调用父类的虚方法,该方法调用会编译成call,否则将会递归调用本身造成栈溢出)。对于值类型,编译器倾向于使用call,因为值类型都是密封的,且永远不为null。

4.可以通过反射修改只读字段。

5.抽象类的默认构造器为protected,静态类在元数据中是static and sealed.

6.值类型没有默认的无参构造器,且C#不允许显式声明无参构造器,显式声明的构造器必须被显式调用

7.编译器根据属性的get set生成相应的方法,以及元数据的一个属性定义。简单的get set方法会内联到所调用的方法里以避免调用的开销。

8.事件编译时生成一个委托类型的字段,以及封装了delegate的combine,remove方法的add_xx,move_xx方法,以及元数据中的事件记录项。

9.对含有泛型的类型参数的方法进行JIT编译时,引用类型参数可以互相共享代码,因为引用类型的参数都是指向堆上的指针。

10.string的Format方法会调用每个对象的ToString方法获取对象的字符串表示,然后拼接在一起返回完整的字符串。

11.拆箱不是装箱的逆过程,而是获得指向包含在装箱对象中原始值类型的指针。拆箱不会在内存中复制,所以代价远小于装箱,但是拆箱之后往往紧接着一次复制操作。

12.Delegate类有两个公共属性:Target返回私有字段_target,如果委托包装的是静态方法则为null,实例方法则为回调方法要操作的对象;Method返回_methodPtr转换成的MethodInfo对象,_methodPtr标识要回调的方法。

13.JIT编译方法时,会检查代码引用了哪些类型,并检查对于当前AppDomain是否已经执行类型构造器初始化类型。JIT编译器可以选择两种形式对静态构造器进行调用:刚好在创建类型的第一个实例前(Precise);在首次访问静态字段或静态/实例方法,或是实例构造器前,随便一个时间调用(BeforeFieldInit)。第二种为首选,如果一个类包含显式静态构造器,则不会添加BeforeFieldInit元数据标记。

14.对象的类型对象指针指向它的类型对象,而它的类型对象的类型对象指针指向System.ValueType,System.ValueType的类型对象指针指向自己(类型对象在Loader堆上)。

15.进程初始化时,CLR所保留的一块地址空间即为托管堆,托管堆维护一个NextObjPtr指针指向下一个对象在堆中的位置。托管堆中连续创建的对象的内存分配是连续的。

16.如果创建新对象时该对象定义了 Finalize方法,该对象的一个指针将会添加到 finalization list(从System.Object继承的除外),GC开始时该对象指针将从 finalization list转移到freachable队列。之后一个高优先级的CLR线程专门负责调用Finalize方法。下一次GC开始后,这些对象会被回收。

17.finalize不能显式调用,实现IDisposible的Disposible方法可以显示进行资源清理(Disposible方法中应调用GC的静态方法SupressFinalize,阻止CLR将对象指针从 finalization list转移到freachable队列,从而阻止对象"活到下一次GC")。

 

CLR via C# 阅读笔记的更多相关文章

  1. CLR via C#学习笔记----知识总概括

    第1章 CLR的执行模型 托管模块的各个组成部分:PE32或PE32+头,CLR头,元数据,IL(中间语言)代码. 高级语言通常只公开了CLR的所有功能的一个子集.然而,IL汇编语言允许开发人员访问C ...

  2. 《C#程序设计教程 -李春保》阅读笔记

    <C#程序设计教程 -李春保>阅读笔记   ( 需注意程度:红>粗体>下划线,蓝色:我的疑问 )   老师的引言 [师]对待一种新语言的关注点 数据类型定义(python不用定 ...

  3. 阅读笔记 1 火球 UML大战需求分析

    伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本   <火球 UML大战需求分析>,首先 ...

  4. [阅读笔记]Software optimization resources

    http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++   7. The efficiency of differe ...

  5. 《uml大战需求分析》阅读笔记05

    <uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...

  6. <<UML大战需求分析>>阅读笔记(2)

    <<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...

  7. uml大战需求分析阅读笔记01

    <<UML大战需求分析>>阅读笔记(1) 刚读了uml大战需求分析的第一二章,读了这些内容之后,令我深有感触.以前学习uml这门课的时候,并没有好好学,那时我认为这门课并没有什 ...

  8. Hadoop阅读笔记(七)——代理模式

    关于Hadoop已经小记了六篇,<Hadoop实战>也已经翻完7章.仔细想想,这么好的一个框架,不能只是流于应用层面,跑跑数据排序.单表链接等,想得其精髓,还需深入内部. 按照<Ha ...

  9. Hadoop阅读笔记(六)——洞悉Hadoop序列化机制Writable

    酒,是个好东西,前提要适量.今天参加了公司的年会,主题就是吃.喝.吹,除了那些天生话唠外,大部分人需要加点酒来作催化剂,让一个平时沉默寡言的码农也能成为一个喷子!在大家推杯换盏之际,难免一些画面浮现脑 ...

随机推荐

  1. Android的数据存储方式(转)

    数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 ...

  2. poj 2425 A Chess Game_sg函数

    题意:给你一个有向无环图,再给你图上的棋子,每人每次只能移动一个棋子,当轮到你不能移动棋子是就输了,棋子可以同时在一个点 比赛时就差这题没ak,做了几天博弈终于搞懂了. #include <io ...

  3. 微软已于10月底停止销售预装Windows 7/8.1的电脑

    如果你想买新电脑,但是对Windows 10不感冒,你最好抓紧时间,因为这个月底是Windows7和Windows8.1的最后销售期限.10月31号是你能买到预装这两款操作系统的新电脑的最后一天,微软 ...

  4. uva 748 Exponentiation 浮点数乘方运算 高精度水题

    输入的前六位数表示一个小数,然后输入一个数表示几次方.要求用高精度算出结果. 高精度水题,主要注意处理小数点,先在输入时把小数点提取出来并记录位置,用普通乘法计算出结果后由后向前计算位置添加小数点. ...

  5. 【贪心+背包】【HDU2546】【饭卡】

    饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  6. mysql的面试试题

    1, mysql的复制原理以及流程. (1)先问基本原理流程,3个线程以及之间的关联. 答:Mysql复制的三个线程:主库线程,从库I/O线程,从库sql线程: 复制流程:(1)I/O线程向主库发出请 ...

  7. asp.net中的绝对路径和相对路径

    一.关于相对路径和绝对路径相对路径转绝对路径一般,我们在ASP.NET网站中往往需要把一个相对路径转化为绝对路径.通常是用Server.MapPath()方法.比如网站根目录下有 个"Upl ...

  8. js事件的相关收集

    1.阻止事件冒泡: IE:cancelBubble = true; 其他: stopPropagation(); 2.阻止事件的默认行为: IE: returnValue = false; 其他: p ...

  9. 使用 Oracle Sql plus的一点经验

    1    当你输入的语句有错误的时候,不用重新输入语句,直接输入ed就会出现一个文本文档显示之前输入的语句,这样你可以在文本文档里面修改语句,最后点保存. 2 三个set:设置每行显示的记录长度:SE ...

  10. linux ftp 安装及相关命令

    1.VSFTP简介 VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全. 安全性是编写VSF ...