《C#高级编程》读书笔记(十):内存管理和指针

1,值数据类型

   值数据类型存储在栈上。栈是从上向下填充的,即从高内存地址向低内存地址填充。当变量超出作用域后,会被从内存中删除。

2,引用数据类型

    栈存储引用,托管堆存储对象。堆上的内存是向上分配的。当一个引用变量超出作用域时,它会从栈中删除,但引用对象的数据仍保留在堆中,一直到程序终止,或垃圾回收器删除它为止,而只有在数据不再被任何变量引用时,它才会被删除。

3,垃圾回收

    垃圾回收器会整理托管堆,以使散碎的内存再次形成一个连续的内存块。

4,释放非托管的资源

    释放非托管的资源(例如文件夹句柄、网络连接和数据库连接等),有两种机制:

    1)声明一个析构函数,作为类的一个成员

    2)在类中实现System.IDisposable接口

    析构函数存在的问题:无法确定C#对象的析构函数何时执行。另一个问题C#析构函数的实现会延迟对象最终从内存中删除的时间。没有析构函数的对象会在垃圾回收器的一次处理中从内存中删除,但有析构函数的对象需要两次处理才能销毁:第一次调用析构函数时,没有删除对象,第二次调用才真正删除对象。

    也可以使用using关键字来实现和IDisposable接口同样的功能。

using (ResourceGobbler theInstance = new ResourceGobbler())
{

}

5,关于指针

    这玩意似乎一辈子都用不到的样子,用到的时候再翻吧,和c++里的指针用法一样。

转载于:https://www.cnblogs.com/khjian/p/5673490.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值