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. PF_RING packet overwrites

    最近在用 PF_RING 抓包过程中,发现个灵异的现象,高流量丢包时, 经常会出现正在处理的包的内容被覆盖.开始,怀疑是不是自己程序有地方越界写了,后来发现,如果自己拷贝一份,然后处理拷贝的那份,永远 ...

  2. 在线获取访客QQ号码的原理及实现方法

    原文地址:http://www.piaoyi.org/network/get-qq-haoma-js.html 正 文: 最近,飘易收到不少在线获取网站访客QQ号码的促销推广邮件,有不少商用网站挖掘了 ...

  3. CentOS bridge br0 kvm libvirt-xml

    1,kvm bridge br0配置文件内容实例: ifcfg-em1配置文件内容Example: DEVICE=em1 Bridge=br0 TYPE=Ethernet onboot=yes NM_ ...

  4. 改变DM6467的内存划分

    上次改过bbxm的http://blog.csdn.net/godofdsp/article/details/9377515,这次搞6467又遇到同样的问题了.按照bbxm的方法修改了内存划分,运行时 ...

  5. 打包静态库.a文件的方法(ar,ranlib,nm命令介绍)

    一 常用脚本 1 打包脚本 脚本如下,下面附上ar 和 ranlib命令参考(命令来自于网络) ALLLIB=*.aFILE=`ls *.a`#原来的库解压重命名 for F in $FILEdo   ...

  6. GCC单独编译host/examples/ tx_waveforms.cpp

    1.编译 须要链接uhd库和boost_program_options库以及boost_thread库: g++ tx_waveforms.cpp -o a -luhd -lboost_program ...

  7. 每日一小练——Eratosthenes 筛选法

    上得厅堂.下得厨房,写得代码.翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:Eratosthenes筛选法 内容: 求质数是一个非常普遍的问题,通常不外乎用数去除.除到不尽时,给定的数就是质数.可是 ...

  8. 使用 Chrome 来调试你的 Android App

    http://www.stormzhang.com/android/2015/03/05/android-debug-use-chrome/ 个人一直对Chrome情有独钟,Chrome除了更快之外, ...

  9. 关于Eclipse的编码配置和字体大小设置

    编码设置 1.工作空间编码:Window-->Preferences-->General-->Workspace 2.工程文件编码:项目-->Properties-->R ...

  10. PHP Version之PHP5.2.x到5.3.x

    不向下兼容的变化 1.  在5.3的所有绑定扩展中应用了新的内部参数解析API,当给函数传递不兼容的参数时将返回NULL,但有些例外,比如函数get_class()在出现错误时返回FALSE 2.  ...