none
谁能够具体的讲讲堆栈和堆得联系和区别? RRS feed

  • 问题

  • 谁能够具体的讲讲堆栈和堆得联系和区别?我从课本上知道堆栈是内存的一块专用区域,这个区域的原则是后进先出。但是堆这个概念不是很熟。
    尤其是在装箱转换上的应用。
    做最好的自己
    2009年8月10日 4:37

答案

  •    栈(stack)可以看成是一种“特殊的”线性表,这种线性表上的插入和删除运算限定在表的某一端进行。允许进行插入和删除的这一端称为栈顶,另一端称为栈底。处于栈顶位置的数据元素称为栈顶元素。

       堆 (heap)
    内存的组成部分,保留给程序用于临时存储数据结构,这些数据结构的存在或大小在程序运行之前都无法确定。
    jon.valett@gmail.com
    2009年8月10日 6:19
    版主
  • 你好 你可以查看这几篇文章:
    http://www.cnblogs.com/SealedLove/archive/2009/02/13/1390278.html


    http://blog.csdn.net/cattiger75/archive/2007/10/14/1824697.aspx

    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年8月10日 4:58
    版主
  • Hi,
      .net里的这个堆Heap 是Managed Heap,托管堆,和我们操作系统里的堆有点区别。这个对为了执行托管代码特别设计的数据结构。
    在.net里,一般值类型的变量会分配到堆栈上,这个都有生命周期,比如方法体内的临时变量,会自动在生命周期结束的时候释放掉内存。
    而对于引用类型,新对象的分配是在托管堆上的,这个对象内存资源的释放和管理是由GC控制的。有具体的回收策略。
      其实你的问题,在.NET 平台上涉及到以后的内存管理和垃圾回收,你可以看看这方面的文章。数据结构的很多知识点在这里有不同的解释。概念上有些差异,可能理解上有点偏差。
    有兴趣的话,你可以看看:.NET深入学习笔记(3):垃圾回收与内存管理 。
    以下是部分内容:
      Net中的所有类型都是(直接或间接)从System.Object类型派生的。

        CTS中的类型被分成两大类——引用类型(reference type,又叫托管类型[managed type]),分配在内存堆上,值类型(value type)。值类型分配在堆栈上。如图

       

         值类型在栈里,先进后出,值类型变量的生命有先后顺序,这个确保了值类型变量在推出作用域以前会释放资源。比引用类型更简单和高效。堆栈是从高地址往低地址分配内存。

         引用类型分配在托管堆(Managed Heap)上,声明一个变量在栈上保存,当使用new创建对象时,会把对象的地址存储在这个变量里。托管堆相反,从低地址往高地址分配内存,如图


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年8月10日 5:05
    版主
  • 堆是堆,栈是栈,为啥要叫堆栈和堆?
    难道只是叫法的不同?

    Hi.
    栈:Stack,
    堆栈:Heap
    国内不知道哪个鸟人翻译的啊,第一个翻译的如果不合适,但是一旦传播开了,就修改不了。
    毕竟文献都跟着这个走了。如果不理解,最好就查找英文原著怎么描述,免得被误导啊。

    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年8月11日 12:31
    版主
  • 主要是翻译的问题:
    堆栈和栈是一个意思,英文原文是Stack
    堆的英文原文是Heap

    周雪峰
    2009年8月11日 13:35
    版主

全部回复

  • 你好 你可以查看这几篇文章:
    http://www.cnblogs.com/SealedLove/archive/2009/02/13/1390278.html


    http://blog.csdn.net/cattiger75/archive/2007/10/14/1824697.aspx

    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年8月10日 4:58
    版主
  • Hi,
      .net里的这个堆Heap 是Managed Heap,托管堆,和我们操作系统里的堆有点区别。这个对为了执行托管代码特别设计的数据结构。
    在.net里,一般值类型的变量会分配到堆栈上,这个都有生命周期,比如方法体内的临时变量,会自动在生命周期结束的时候释放掉内存。
    而对于引用类型,新对象的分配是在托管堆上的,这个对象内存资源的释放和管理是由GC控制的。有具体的回收策略。
      其实你的问题,在.NET 平台上涉及到以后的内存管理和垃圾回收,你可以看看这方面的文章。数据结构的很多知识点在这里有不同的解释。概念上有些差异,可能理解上有点偏差。
    有兴趣的话,你可以看看:.NET深入学习笔记(3):垃圾回收与内存管理 。
    以下是部分内容:
      Net中的所有类型都是(直接或间接)从System.Object类型派生的。

        CTS中的类型被分成两大类——引用类型(reference type,又叫托管类型[managed type]),分配在内存堆上,值类型(value type)。值类型分配在堆栈上。如图

       

         值类型在栈里,先进后出,值类型变量的生命有先后顺序,这个确保了值类型变量在推出作用域以前会释放资源。比引用类型更简单和高效。堆栈是从高地址往低地址分配内存。

         引用类型分配在托管堆(Managed Heap)上,声明一个变量在栈上保存,当使用new创建对象时,会把对象的地址存储在这个变量里。托管堆相反,从低地址往高地址分配内存,如图


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年8月10日 5:05
    版主
  •    栈(stack)可以看成是一种“特殊的”线性表,这种线性表上的插入和删除运算限定在表的某一端进行。允许进行插入和删除的这一端称为栈顶,另一端称为栈底。处于栈顶位置的数据元素称为栈顶元素。

       堆 (heap)
    内存的组成部分,保留给程序用于临时存储数据结构,这些数据结构的存在或大小在程序运行之前都无法确定。
    jon.valett@gmail.com
    2009年8月10日 6:19
    版主
  • 堆是堆,栈是栈,为啥要叫堆栈和堆?
    难道只是叫法的不同?
    2009年8月11日 9:10
  • 堆是堆,栈是栈,为啥要叫堆栈和堆?
    难道只是叫法的不同?

    Hi.
    栈:Stack,
    堆栈:Heap
    国内不知道哪个鸟人翻译的啊,第一个翻译的如果不合适,但是一旦传播开了,就修改不了。
    毕竟文献都跟着这个走了。如果不理解,最好就查找英文原著怎么描述,免得被误导啊。

    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年8月11日 12:31
    版主
  • 主要是翻译的问题:
    堆栈和栈是一个意思,英文原文是Stack
    堆的英文原文是Heap

    周雪峰
    2009年8月11日 13:35
    版主