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


    1,值数据类型

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

    2,引用数据类型

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

    3,垃圾回收

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

    4,释放非托管的资源

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

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

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

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

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

    using (ResourceGobbler theInstance = new ResourceGobbler())
    {
    
    }

    5,关于指针

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

  • 相关阅读:
    35 个 Java 代码性能优化总结
    P4172 [WC2006]水管局长(LCT)
    P4219 [BJOI2014]大融合(LCT)
    P1501 [国家集训队]Tree II(LCT)
    P4381 [IOI2008]Island(基环树+单调队列优化dp)
    P3332 [ZJOI2013]K大数查询(线段树套线段树+标记永久化)
    P3809 【模板】后缀排序
    P3813 [FJOI2017]矩阵填数(组合数学)
    P2147 [SDOI2008]洞穴勘测(LCT)
    P3924 康娜的线段树(期望)
  • 原文地址:https://www.cnblogs.com/khjian/p/5673490.html
Copyright © 2020-2023  润新知