摘要:
问题: 什么是垃圾回收? 如何回收? 作用?解答: 垃圾回收就是当托管堆中对象不再引用时,垃圾回收程序在一情况下,会检查托管堆中没用对象,然后释放其内存; 阅读全文
摘要:
问题:什么是非托管资源;为什么要手动处理;如何处理,代码?解答: 第一部分:非托管资源就是指一些系统的资源,如文件、网络连接数、窗口等;第二部分:因为GC不能正确回收非托管资源;基本上有两种方法可以处理,一是GC回收时通过实例析构函数中用户重写的Finalize来清除,但性能不太好,还是用户实现接口IDispose,调用Dispose函数,释放资源; 第三部分: class myclass : IDisposable { private int data; public myclass(int a) { data = a; } ~myclass()... 阅读全文
摘要:
问题: 什么是托管堆? 作用?解答: 第一部分:托管堆是相对于堆栈的内存,程序自由分配;托管堆中分别包括:GC heap、Loader heap两种;GC heap 用于垃圾回收,Loader heap 用于dll加载,存着对象方法表等内容 ; 4.托管堆的内存,其实不是真正的物理内存,而是虚拟内存,程序进程都共享物理内存,它们的虚拟内存大小一样,默认32位系统,进程 有2G虚拟内存;PS:还更深入内容待各位加入 阅读全文
摘要:
问题: 什么是override与new? 两者不同? 为什么要出现两者?解答: 第一部分:override(覆写)从字面上就要理解,覆盖了,新的盖住旧的,不再有旧的;要new为重载,重,多重,继保留了新的,也保留了旧的; 第二部分: 用代码要说明吧; class Program { class bird { public void showType() { Console.WriteLine("bird"); } public virtual void showClass() { Console.WriteLine... 阅读全文
摘要:
问题:什么是函数表指针作用解答: 第一部分:对象在实例化时,会在托管堆中分配多四个字节,用于指向对象的方法表的内存地址;方法表,是编译程序时,为对象创建的,注意是对象,不是对象实例。方法表主要有对象类型,实现了多少个接口,方法表的slot数目等.待深入 第二部分:通过些函数表指针,可以调用方法等内容,并对一对象不同实例可以共享方法表,减少内存分配,并在编译时,就已经建好,提高速度ps:待各位指向不足与提供更深入探讨; 阅读全文
摘要:
问题:什么是装箱与拆箱?区别是什么?作用是什么?代码实现例子?解答: 第一点:装箱就是把值类型转换成引用类型的过程;反之拆箱就是引用类型转换在值类型的过程;值类型就是变量的数据存储在栈内存,就是变量名就是包括了数据;引用类型则是变量数据地址存在栈,地址指向堆内存,堆内存储存着真正数据,变量名是一个地址,指向堆内存地始位置;值类型变量当超出作用域时,内存自动回收,与堆则要等垃圾回收;值类型有:结构类(数据类型,bool,用户自定义结据),杖举,可空类型。引用类型有:自定义类,接口等;第二点;装箱可以explicit或implicit; 如object o = 3;object oo = (ob. 阅读全文
摘要:
部分资料引用:http://www.cnblogs.com/yuyijq/archive/2009/08/18/1549022.htmlhttp://www.cnblogs.com/yangecnu/archive/2013/02/19/Reference_Type_Internal.html问题: 什么同步索引? 作用?解答: 第一部分:同步索引块是在对象实例时在堆内存分配给实例的4个字节的块(32位);在实例对像时,真实分配情况是这样。而object header word 就是syncblockindex同步索引块;当lock对象与GetHashCode时,都修改块值。当只lock时.. 阅读全文
摘要:
问题:什么是值类型,什么是引用类型;值类型与引用类型的区别;为什么要分值类型与引用类型;解答: 第一部分: 值类型就是变量名就是变量的值;存于栈中;引用类型则是变量名在栈中保存一个内存地址指向堆中真实数据值;值类型有: 结构类(数据类型,bool,用户自定义结据,杖举,可空类型。引用类型有:自定义类,接口, 第二部分:主要是数据内存分配方式的不同,一种是栈一种是堆;以上两图是简单描述;int a = 3;int b = 4;a = b;拷贝方式是将b内存值,拷贝给a内存;这种赋值;class jia{public int a;} class jia j = new jia{a = 1;b... 阅读全文
摘要:
问题: 什么是栈?什么是堆? 区别? 为什么要分成两种内存方式?解答: 第一问: 栈编译器自动分配 ;堆是程序需要时,才分配;第二问:栈:由低地址向高分配,且内存大小有限,1到2M,可调整;在同一个栈中,内存连续,因此中同一个函数块中读不同的局部值类型数据,速度比堆快;堆:由高地址向地址分配,内存受限于系统虚拟内存,因此内存很大;由于变量名中在栈中分配4个字节存储堆的起始位,产生非数据内存,同样由于当需要堆内存时,系统是向管理堆内存的链表查询并分配,所以不同引用变量的堆地址不同,使程序询问速度减低。分配过程也耗时。栈有专业寄存器管理,堆则间接寻址。 第三问:主要是内存不确定性,当程序... 阅读全文