日期:2014-05-20  浏览次数:20722 次

堆和栈谁能详细解答一下具体含义呢
堆和栈有什么区别 他们都是内存空间吗 谁能详细说下 还有入栈出栈顺序 谢谢

------解决方案--------------------
在.net中。堆和栈是这样的。

值类型的对象都是存储在栈上。而这个栈是在内存中分配的,速度比较快。用来保存临时的变量或者函数的参数。栈是先入后出的,即后入栈的对象先出栈。
如函数 void Test(string tt,int i) {} ;在调用函数时,比如:Test("str",19);先复制函数的参数"str"和19,生成一个副本,先把"str"入栈,再把19入栈。在函数返回时,即return;,这时候先把19出栈,再把"str"出栈。

堆,在.NET中叫做托管堆。意思是受CLR托管的对象。堆也是内存的控件,但是它的大小可以覆盖整个内存和虚拟内存,但是它的速度相对 栈 来说比较慢。引用类型的对象的数据都是保存在 托管堆 上的。注意,引用类型的对象是保存在 栈 上的,但是它指向的数据 保存在 托管堆 里面。

不知道这样说你明白了没。。。
------解决方案--------------------
棧是線程的私有空間,各自的線程都不能隨意訪問其它線程的私有空間,除非特別處理,值類型的存儲空間都是存儲在棧中的.棧的內存地址是從大到小的分配,棧的運行速度要快,但其空間大小有限.
堆是進程地址空間中的一個內存區域,所有同一個進程下的線程都可以訪問這個內存區域,它用於分配引用類型實例.完全由垃圾收集器控制.引用類型的存儲空間都是在堆中.它除了存儲類中的數據還要存儲類的行為.托管堆完全由.net垃圾回收器控制.它處理速度要比棧慢,但它的空間相對大得多