zoukankan      html  css  js  c++  java
  • C#堆和栈

    堆与栈都是内存空间的一部分,其中,堆又可以分为托管堆和非托管堆。托管堆和栈由 CLR 管理。

    这里的堆(heap)是托管堆(managed heap)的简称。顾名思义,它由 CLR 进行管理。

    它是在运行程序时,CLR 申请的一块内存空间。它基于进程,属于进程内存空间的一部分。

    当创建新对象时,若该对象是引用类型或者包括引用类型的值类型,就会在 GC 堆上申请空闲的内存空间,CLR 会先计算需要的空间大小。如果堆上已经没有剩余空间了,就触发一次垃圾回收。如果回收之后仍然无法获得足够的剩余空间,则掷出 OutOfMemory 异常。

    GC 堆维护一个叫做 NextObjPtr 的指针,指向 GC 堆的下一个可用地址。为了尽量合理利用空间,GC 堆的内存分配是连续的。当垃圾收集结束之后,由于有些空间被释放,内存可能出现碎片,此时,会进行压缩,将内存重新变回连续状态。

    这里的堆(heap)是托管堆(managed heap)的简称。顾名思义,它由 CLR 进行管理。

    它是在运行程序时,CLR 申请的一块内存空间。它基于进程,属于进程内存空间的一部分。

    当创建新对象时,若该对象是引用类型或者包括引用类型的值类型,就会在 GC 堆上申请空闲的内存空间,CLR 会先计算需要的空间大小。如果堆上已经没有剩余空间了,就触发一次垃圾回收。如果回收之后仍然无法获得足够的剩余空间,则掷出 OutOfMemory 异常。

    GC 堆维护一个叫做 NextObjPtr 的指针,指向 GC 堆的下一个可用地址。为了尽量合理利用空间,GC 堆的内存分配是连续的。当垃圾收集结束之后,由于有些空间被释放,内存可能出现碎片,此时,会进行压缩,将内存重新变回连续状态。

    参考:

    http://c.biancheng.net/view/3070.html

    https://www.cnblogs.com/zd1994/p/4424329.html

  • 相关阅读:
    docker 入门(docker 镜像 、容器、仓库)
    windows 安装 docker
    关于go mod 的使用和goland 配置 go mod
    mac 安装docker
    vm 将宿主机文件夹 映射至 虚拟机
    centos 关于yum无法使用
    mac 安装 swoole 可能会出现的错误
    BZOJ3378:[USACO]MooFest 狂欢节(树状数组)
    BZOJ3110:[ZJOI2013]K大数查询(整体二分)
    BZOJ4170:极光(CDQ分治)
  • 原文地址:https://www.cnblogs.com/zwh1993/p/11248838.html
Copyright © 2011-2022 走看看