1,值数据类型
值数据类型存储在栈上。栈是从上向下填充的,即从高内存地址向低内存地址填充。当变量超出作用域后,会被从内存中删除。
2,引用数据类型
栈存储引用,托管堆存储对象。堆上的内存是向上分配的。当一个引用变量超出作用域时,它会从栈中删除,但引用对象的数据仍保留在堆中,一直到程序终止,或垃圾回收器删除它为止,而只有在数据不再被任何变量引用时,它才会被删除。
3,垃圾回收
垃圾回收器会整理托管堆,以使散碎的内存再次形成一个连续的内存块。
4,释放非托管的资源
释放非托管的资源(例如文件夹句柄、网络连接和数据库连接等),有两种机制:
1)声明一个析构函数,作为类的一个成员
2)在类中实现System.IDisposable接口
析构函数存在的问题:无法确定C#对象的析构函数何时执行。另一个问题C#析构函数的实现会延迟对象最终从内存中删除的时间。没有析构函数的对象会在垃圾回收器的一次处理中从内存中删除,但有析构函数的对象需要两次处理才能销毁:第一次调用析构函数时,没有删除对象,第二次调用才真正删除对象。
也可以使用using关键字来实现和IDisposable接口同样的功能。
using (ResourceGobbler theInstance = new ResourceGobbler()) { }
5,关于指针
这玩意似乎一辈子都用不到的样子,用到的时候再翻吧,和c++里的指针用法一样。