堆和栈谁能详细解答一下具体含义呢

jmghoul 2009-10-22 11:59:16
堆和栈有什么区别 他们都是内存空间吗 谁能详细说下 还有入栈出栈顺序 谢谢
...全文
87 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzhdim 2009-10-26
  • 打赏
  • 举报
回复
这个贴还在啊。还没结。。。。。。。
hjhgg 2009-10-22
  • 打赏
  • 举报
回复
偶帮顶起来啊
Dobzhansky 2009-10-22
  • 打赏
  • 举报
回复
看上下文

主要是 stack 的概念,
描述变量存储时;
描述函数调用时. 需要区分一下.
xiulinwang123 2009-10-22
  • 打赏
  • 举报
回复
棧是線程的私有空間,各自的線程都不能隨意訪問其它線程的私有空間,除非特別處理,值類型的存儲空間都是存儲在棧中的.棧的內存地址是從大到小的分配,棧的運行速度要快,但其空間大小有限.
堆是進程地址空間中的一個內存區域,所有同一個進程下的線程都可以訪問這個內存區域,它用於分配引用類型實例.完全由垃圾收集器控制.引用類型的存儲空間都是在堆中.它除了存儲類中的數據還要存儲類的行為.托管堆完全由.net垃圾回收器控制.它處理速度要比棧慢,但它的空間相對大得多
猿来是我 2009-10-22
  • 打赏
  • 举报
回复
楼上说的就是。
打个比方补充一下:栈,整齐有序的排好队的一群人;堆栈,一个大广场,有物资需要放的话就空降到那里吧,只是物资都贴有标签。
lzhdim 2009-10-22
  • 打赏
  • 举报
回复
在.net中。堆和栈是这样的。

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

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

不知道这样说你明白了没。。。

13,347

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET技术前瞻
社区管理员
  • .NET技术前瞻社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧