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. VC++6.0下通过opencv读入图像并反色

    第一个opencv测试程序: 不多说,直接上代码,代码注释很详尽: ////////////////////////////////////////////////////////////////// ...

  2. 【HDU 2013 猴子吃桃子】 尾递归与迭代

    大一时的一道C语言练习题,可作为递归和尾递归转迭代的范例.HDU 2013 http://acm.hdu.edu.cn/showproblem.php?pid=2013 题意:猴子摘了sum个桃子,从 ...

  3. UML_静态图

    类图        类图是描述类,接口,协作以及它们之间关系的图,用来显示系统中各个类的静态结构.类图是定义其他图的基础,在类图的基础上,可以使用状态图,协作图,组件图和配置图等进一步描述系统其他方面 ...

  4. Number Sequence(kmp)

        Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  5. ASP.NET之自定义异步HTTP处理程序(图文教程)

    前面我们学习了关于关于自定义同步HTTP处理程序,相信大家可能感觉有所成就,但是这种同步的机制只能对付客户访问较少的情况或者数据处理量不大的情况,而今天这篇文章就是解决同步HTTP处理程序的这个致命缺 ...

  6. js判断的执行顺序

    js预编译是对每一个<script>标签片段进行的.预编译声明所有var变量(初始为undefined),解析定义式函数语句. 还有个关于 "window作用域下,a = 1和v ...

  7. 13个mysql数据库的实用SQL小技巧

    此文章为转载 使用CASE来重新定义数值类型 SELECT id,title, (CASE date WHEN '0000-00-00' THEN '' ELSE date END) AS date ...

  8. 本地网址连不上远程mysql问题

    问题:host 'XXX.XXX.XXX.XXX'is not allowed to connect to this MySQL server 解决办法: 进入远程mysql #mysql -u ro ...

  9. ZRender源码分析4:Painter(View层)-中

    回顾 上一篇说到:ZRender源码分析3:Painter(View层)-上,接上篇,开始Shape对象 总体理解 先回到上次的Painter的render方法 /** * 首次绘图,创建各种dom和 ...

  10. Android Activity之 setContentView()总结

    从一开始hello world的第一个安卓应用开始,Activity 自动生成,布局自动生成,直接修改布局,在Activity中,findviewById()找到view,然后处理相应的业务逻辑即可, ...