zoukankan      html  css  js  c++  java
  • 《C#高级编程》读书笔记(十):内存管理和指针

    1,值数据类型

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

    2,引用数据类型

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

    3,垃圾回收

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

    4,释放非托管的资源

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

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

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

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

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

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

    5,关于指针

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

  • 相关阅读:
    ASP.NET Core中的Action的返回值类型
    ASP.NET Core中的Controller
    ASP.NET Core Authentication and Authorization
    ASP.NET Core
    ASP.NET Core ActionFilter引发的一个EF异常
    使用Github Packages功能上传nuget包到Github
    「每日五分钟,玩转JVM」:线程共享区
    JVM(二):画骨
    Spring Boot 2.x (十八):邮件服务一文打尽
    一道面试题
  • 原文地址:https://www.cnblogs.com/khjian/p/5673490.html
Copyright © 2011-2022 走看看