.Net垃圾回收

C#编程的一个优点是程序员不需要担心具体的内存管理,垃圾回收器会自动处理所有的内存清理工作。

Windows使用一个系统:虚拟寻址系统,该系统把程序可用的内存地址映射到硬件内存中的实际地址上,这些任务完全由Windows在后台管理。每个进程都能够使用4GB的内存空间(32位)。4GB的内存包含了程序的所有部分,包括可执行代码,代码加载的所有DLL,以及程序运行时使用的所有变量的内容。

虚拟内存中有一个栈,管理值数据类型。

那么引用类型如何管理,接下来看代码

Stu s;//申明了一个Stu的引用,在栈上给这个引用分配存储空间,但这仅仅是一个引用,而不是Stu对象
            s = new Stu();//分配堆上的内存,存储Stu对象,然后把s的值设置为新Stu对象的内存地址
            //把一个引用变量的值赋予另一个相同类型的变量,就有两个引用内存中统一个对象变量了。当一个
            //引用变量超出作用域时,它就会从栈中删除,但引用对象的数据仍然保存在堆中,一直到程序终止,或垃圾回收删除他
            //而他只有在没有任何引用变量是,他才会被删除

 正因为有了垃圾回收,且垃圾回收的发生是不确定的,所以C#中的析构函数使用很少,因为你不知道写在析构函数中的代码什么时候执行。c++则是立即执行析构函数中的代码,这就是有区别的地方。

那么C#中如何控制何时释放非托管资源?答案就是使用IDisposable接口

原文地址:https://www.cnblogs.com/HelloMyWorld/p/3083306.html