A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sunrise2 高级黑马   /  2014-7-15 12:35  /  1690 人查看  /  9 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 sunrise2 于 2014-7-15 12:43 编辑

                                           .NET的堆和栈 ,基本概念
          当我们对.NETFramework的一些基本面了解之后,实际上,还是很有必要了解一些更底层的知识。比如.NETFramework是如何进行内存管理的,是如何垃圾回收的.. ....这样,我们才能写出更高性能的程序。
          在.NETFramework中,有2个地方帮我们保存管理数据:一个是"堆",也叫"托管堆",由.NETFramework的垃圾收集器(Garbage Collection,GC)管理;另一个是"栈",也叫"线程堆栈",由操作系统直接管理。它们都寄宿在操作系统内存。
  什么是"栈"
       可以把""想像成由下而上堆叠起来的盒子,值类型实例存储于此。
                     

在应用程序中,每当调用一个方法,就相当于在"堆"上放上了一个盒子A,这时,应用程序只能使用处在"栈"最上方、刚被放上的这个盒子A,当方法执行结束,相当于把最上方的盒子A扔掉。接下来,刚才还在A下面的盒子B就处在"栈"的最上方了,于是应用程序又开始使用盒子B,以此类推。而且,每当把最上面的盒子扔掉,其对应的内存也被自动释放。
栈的优点是执行效率高,缺点是存储容量有限。
在.NET Framework中,所有派生于System.ValueType的就是值类型,值类型实例位于"栈"。值类型包括:
   ● bool
   ● byte
   ● char
   ● decimal
   ● double
   ● enum
   ● float
   ● int
   ● long
   ● sbyte
   ● short
   ● stuct
   ● uint
   ● ulong
   ● short
什么是"堆"
   可以把""想像成一些摆放无序的盒子,引用类型实例存储于此。
        
我们可以在任何时候,使用任何盒子。我们需要借助垃圾收集器(GarbageCollection, GC)的自动回收机制或手动处理,以保证"堆"的盒子被及时回收。

       另外,根据引用类型实例的大小,"堆"分为"GC堆"和"LOH(Large Object Heap)堆",当引用类型实例大小小于85000个字节的时候,实例被分配在"GC堆"上;当实例大小大于或等于于85000个字节的时候,实例被分配在"LOH(Large Object Heap)堆"。
在.NET Framework中,所有派生于System.Object的就是引用类型,引用类型实例位于"堆"。引用类型包括:
      ● 类 class
      ● 接口 interface
      ● 委托 delegate
      ● object
      ● string


评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

9 个回复

倒序浏览
学习了!
回复 使用道具 举报

简单,很重要的基础,加油
回复 使用道具 举报
好贴,顶一个
回复 使用道具 举报

谢谢,相互学习
回复 使用道具 举报
这些知识对编程还是有帮助的
回复 使用道具 举报
路过学习了!
回复 使用道具 举报
顶一个!
回复 使用道具 举报
赞赞赞
回复 使用道具 举报
路过学习了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马