搜索出来很多答案。。都是些什么C/C++什么的。。有点晕。。到底在C#中。。上面三个是什么概念?。。有人说栈和堆栈是一回事情,就是翻译不同。。又出来个托管堆。。是什么?。。晕了晕了。。彻底晕了。。T_T希望真正透彻的人用例子讲一下。。不要又粘贴N长的文章。。谢谢。。

解决方案 »

  1.   

    堆栈就是栈
    堆是全局的内存空间,在堆里面分配对象都需要程序员来销毁,它不会自动销毁,
    托管堆就是有CLR来帮你销毁对象,不需要像c++里面来delete
    用new生成的对象就是在堆中分配的
    栈分配的内存会自动释放,临时变量,临时对象,一般来说没有用new分配的对象都在栈中
      

  2.   

    http://agassi001.cnblogs.com/archive/2006/05/10/396574.html.net 中的堆栈..
      

  3.   

    就我目前的知识,说一下(不知道是对是错,楼下的帮看看)当一个应用程序启动时(这里假定为某个.exe程序),系统会分配一块内存空间给它,并另外再分配一个谓之“栈”的空间,应用程序在需要时,会在这个“栈”里面分配空间,比如看到 int x = 5;时,就在这个“栈”里面分配一个int数据的空间(注意,“栈”在启动.exe程序时,其在内存中的位置和大小就分配好了,如果不够用我不知道怎么办),非引用类型都是这样分配空间的,即不是用new来分配的东东,都在这个“栈”里这么分配了;与之相对应的就是“堆”了(可能也叫堆栈,不确定,水平有限),那么什么是“堆”呢?
    “堆”,就是内存空间,就是那些不属于任何.exe程序启动时被分配的空间(包括程序空间和“栈”的空间),换句话说,比如你有256MB内存,启动一个.exe程序,就会分配一定的空间(包括程序空间和一个“栈”),假设是10MB,那么还有246MB,这些就都是“堆”了,你在应用程序中new一个实例,就是在这246MB里,分配一定的空间给这个应用程序用了。(这里是打个比方,你要分配>256MB的空间也行,操作系统会通过虚拟内存技术来满足你的需求)总结一下,“栈”和“堆”都是内存空间
    “栈”随应用程序启动而分配,其在内存中的位置和大小,一开始就分配好了;
    “堆”不随应用程序启动而分配,你需要(new类实例)时才分配,其在内存中的位置是不确定的,大小就是类的大小了;再多说一下,比如有一个Test类,程序中代码如下:
    Test MyTest = new Test();MyTest实例在“堆”中分配好空间,其在内存中的首地址,返回给程序使用,这是一个4个字节数值,它被赋给MyTest这个“变量”,MyTest这个“变量”就是一个引用,它的长度为4个字节,正好装下返回的地址值,那么,既然MyTest这个“变量”本身也是有大小的(4字节),那么它是在哪里分配的呢?答案是“栈”,MyTest这个“变量”是在“栈”中。
    也就是说,“栈”中分配一个4字节的空间,这个空间里记录一个4字节长度的数值,这个数值是一个内存地址,指向“堆”空间(内存)中的一个单元,以此单元为首地址,这里记录着一个类实例。不知道楼主明白了没有,希望不会被我越说越糊涂(也希望我说的是正确的)
      

  4.   

    在cil里,简单点讲,堆主要是为了你的对象之类分配内存的,栈主要是为了方法的调用和退出(参数的压栈和出栈)服务的。因此,其特点也不一样。
      

  5.   

    Thank you ..根据以上各位的回复明白了好多。。希望各位说的都是对的。。哈哈。(sorry..开个玩笑。。)
      

  6.   

    堆栈就是栈
    堆是全局的内存空间,在堆里面分配对象都需要程序员来销毁,它不会自动销毁,
    栈分配的内存会自动释放,临时变量,临时对象,一般来说没有用new分配的对象都在栈中