12 2011 档案
摘要: C#运行时的相互关系本博客主要讲述运行时类型、对象、线程栈和托管堆之间的相互关系,静态方法、实例方法和虚方法的区别,以及内存的分配和回收。线程栈:在一个进程中可能包含多个线程,一个线程在创建的时候,会分配到一个大小1MB大小的栈,栈用于存储方法的实参、形参以及方法内部的局部变量,栈是从高位内存地址向地位地址构建的,由于栈有先进后出的特点,所以先定义的变量后被回收。下面来看一个简单的例子,让你更了解线程栈由于线程栈是从高位开始分配内存,先分配的我就画在上面了,在调用F1();方法时,分配内存的顺序是:name->n->F2的返回地址->Age->name;回收内存的顺序当阅读全文
摘要: 递归再一次让哥震惊了先说那两个让哥震惊的递归问题:1:用递归实现单链表的倒序输出2:从二叉查找树中删除节点,并保证还是二叉查找树同学们可以开始思考这两个问题了,当然你可能N年前就遇到过这两个问题,那么不妨看看,看你是否真的理解了递归。实现这两个问题的代码当然很简单,就在下面。百度百科中递归的名片:递归做为一种算法在程序设计语言中广泛应用.是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象.递归是计算机科学的一个重要概念,递归的方法是程序设计中有效的方法,采用递归编写程序能使程序变得简洁和清晰。刚开始学习的递归的时候,觉得他好强大,实现某些功能不用递归可能要几十行代码,用递归可阅读全文
摘要: 垃圾回收--代代是CLR垃圾回收器采用的一种机制,他唯一的目的就是提升应用程序的性能,采用代的垃圾回收器做到了一下几点:1:对象越新,生存周期越短,跟栈的原理很像,先进后出,先定义的局部变量,在栈中停留的时间相对长一点。2:对象越老,生存周期越长,后面解释。3:回收堆的一部分,速度快于回收整个堆,那是肯定的,就是为了实现只回收一部分内存中的数据,才产生了代的概念,大多数时间只回收第0代。第0代:托管堆在初始化的时候不包含任何对象,新分配在堆上的对象被称为第0代,垃圾回收器从没有检查过他,CLR在初始化的时候,会为第0代预算了一个容量,假设为256KB,容量一般为128KB的整数倍,这跟CPU的阅读全文
摘要: C#方法1:实例构造器和类2:实例构造器和结构3:类型构造器4:操作符重载方法5:转换操作符方法6:扩展方法 7:部分方法这篇博客的内容基本上是CLR via C#中第八章 “方法”的大致内容,如果我说得不对,欢迎大家搬砖头1:实例构造器和类构造器是允许将类型的实例初始化为良好状态的一种特殊方法,创建一个引用类型的实例时,先为实例的数据字段分配内存,然后初始化对象的附加字段(类型对象指针和同步索引),最后调用构造函数来设置对象的初始状态。构造函数不能被继承,所以不能被virtual、new、override、sealed和abstract修饰,若没有显示定义任何构造函数,编译器将定义一个无参的阅读全文