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++里的指针用法一样。

  • 相关阅读:
    Delphi 访问https /SSL、OpenSSL
    Delphi UTF编码/解码 UTF8Encode、UTF8Decode、URLEncode、URLDecode
    编译器架构Compiler Architecture(下)
    编译器架构Compiler Architecture(上)
    Xilinx Zynq FPGA Boards板
    如何为应用选择最佳的FPGA(下)
    如何为应用选择最佳的FPGA(上)
    FPGA与ASIC:它们之间的区别以及使用哪一种?
    ASIC设计-终极指南
    77GHz 和24GHz Radar性能解析
  • 原文地址:https://www.cnblogs.com/khjian/p/5673490.html
Copyright © 2011-2022 走看看