C# 第二天

1.内存,栈,堆

(1)windows使用一个虚拟的寻址系统,该系统把程序可用的内存地址映射到硬件内存中的实际地址上。4GB的内存称为虚拟地址空间,或虚拟内存,简称内存。这4GB的内存中的每个的存储单元都是从0开始往上排序。从低地址往高地址分配。

(2)在这4GB的内存中有一个区域成为栈,程序第一次运行时,栈指针指向为栈保留的内存块末尾,栈实际上是是从下填充的,即从高内存地址向低内存地址填充。

(3)托管堆(简称为堆)是内存中的另外一个内存区域。堆上的内存是向上分配的。


2 垃圾回收

(1)在垃圾回收器运行时,它会从堆中删除不再引用的所有对象。垃圾回收器在引用的根表中找到所有的对象,接着在引用的对象树种查找。在完成删除操作后,堆会立即把对象分散开来,与已经释放的内存混合在一起。

(2)垃圾回收器释放了能释放的所有对象后,就会把其他对象移回到堆得顶端,再次形成一个连续的内存块。因此堆可以像栈那样确定在什么地方存储新对象。当然在移动对象时,这些对象的所有引用都需要正确的新地址来更新


3.处理非托管的资源

垃圾回收器不知道如何释放非托管的资源(例如,文件句柄,网络连接和数据库连接),使用两种机制来释放非托管的资源

(1)声明一个析构函数(或终结器),作为类的一个成员

(2)在类中实现System.IDisposeable 接口

你可能感兴趣的:(C# 第二天)