问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C#堆和堆栈有什么区别

发布网友 发布时间:2022-03-30 10:52

我来回答

6个回答

懂视网 时间:2022-03-30 15:13

堆栈的工作方式是先进后出。在内存储器(随机存储器)中开辟一个区域作为堆栈,叫软件堆栈;用寄存器构成的堆栈,叫硬件堆栈。

  

  堆栈是一个特定的存储区或寄存器,它的一端是固定的,另一端是浮动的。对这个存储区存入的数据,是一种特殊的数据结构。所有的数据存入或取出,只能在浮动的一端(称栈顶)进行,严格按照“先进后出”的原则存取,位于其中间的元素,必须在其栈上部(后进栈者)诸元素逐个移出后才能取出。

  

  

热心网友 时间:2022-03-30 12:21

首先堆栈和堆(托管堆)都在进程的虚拟内存中。(在32位处理器上每个进程的虚拟内存为4GB)

堆栈stack

堆栈中存储值类型。

堆栈实际上是向下填充,即由高内存地址指向地内存地址填充。

堆栈的工作方式是先分配内存的变量后释放(先进后出原则)。

堆栈中的变量是从下向上释放,这样就保证了堆栈中先进后出的规则不与变量的生命周期起冲突!

堆栈的性能非常高,但是对于所有的变量来说还不太灵活,而且变量的生命周期必须嵌套。

通常我们希望使用一种方法分配内存来存储数据,并且方法退出后很长一段时间内数据仍然可以使用。此时就要用到堆(托管堆)!

堆(托管堆)heap

堆(托管堆)存储引用类型。

此堆非彼堆,.NET中的堆由垃圾收集器自动管理。

与堆栈不同,堆是从下往上分配,所以自由的空间都在已用空间的上面。

比如创建一个对象:

Customer cus;

cus = new Customer();

申明一个Customer的引用cus,在堆栈上给这个引用分配存储空间。这仅仅只是一个引用,不是实际的Customer对象!

cus占4个字节的空间,包含了存储Customer的引用地址。

接着分配堆上的内存以存储Customer对象的实例,假定Customer对象的实例是32字节,为了在堆上找到一个存储Customer对象的存储位置。

.NET运行库在堆中搜索第一个从未使用的,32字节的连续块存储Customer对象的实例!

然后把分配给Customer对象实例的地址赋给cus变量!

从这个例子中可以看出,建立对象引用的过程比建立值变量的过程复杂,且不能避免性能的降低!

实际上就是.NET运行库保存对的状态信息,在堆中添加新数据时,堆栈中的引用变量也要更新。性能上损失很多!

有种机制在分配变量内存的时候,不会受到堆栈的*:把一个引用变量的值赋给一个相同类型的变量,那么这两个变量就引用同一个堆中的对象。

当一个应用变量出作用域时,它会从堆栈中删除。但引用对象的数据仍然保留在堆中,一直到程序结束 或者 该数据不被任何变量应用时,垃圾收集器会删除它。

热心网友 时间:2022-03-30 13:39

线程堆栈:简称栈 Stack
托管堆: 简称堆 Heap

栈与堆的区别
栈通常保存着代码执行的步骤,如在代码段1中 AddFive()方法,int pValue变量,int result变量等等。而堆上存放的则多是对象,数据等。可以把栈想象成一个接着一个叠放在一起的盒子。当使用的时候,每次从最顶部取走一个盒子。栈也是如此,当一个方法(或类型)被调用完成的时候,就从栈顶取走,接着下一个。堆则不然,像是一个仓库,储存着使用的各种对象等信息,跟栈不同的是他们被调用完毕不会立即被清理掉。
栈内存无需管理,也不受GC管理。当栈顶元素使用完毕,立马释放。而堆则需要GC(Garbage collection:垃圾收集器)清理。

热心网友 时间:2022-03-30 15:14

你应该问堆和栈的区别 c#里很少用到这些概念 其实在你new 一个对象的时候,你这个对象是放在内存里的

热心网友 时间:2022-03-30 17:05

先进先出,先进后出?

热心网友 时间:2022-03-30 19:13

堆栈存储值类型以及引用类型的引用...托管堆存储引用类型对象...建议你看看关于CLR方面的书籍
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...换手机号显示你以设置拒收微信登陆.换绑.注册短信怎么解决? 伊拉克战争是哪些国家发动的?请快回答,我有急用! 二零零三年三月谁发动了对伊拉克的战争 西门子、美的、容声三个门的冰箱那个牌子又省电又实用? 海尔冰箱BCD-206 SCFM 放3档工作多长时间 ,停多长时间正常 海尔BCD-206SCFM基本参数 6年级上册数学练习册百分数50到53页答案 小学数学六年级(上):帮你学数学口算练习册2008年印刷版信息 小学数学六年级(上):帮你学数学口算练习册2010年印刷版信息 小学六年级数学上册百分数练习册《课堂作业本》答案64面第2题 堆栈的功能,操作过程和特点 堆栈的工作原理是什么??? 在吗,7米跨度要多大的梁 300平米混泥土框架结构跨度最多多宽? 建筑中柱子之间的距离多少为好? 建筑结构梁高与梁宽一般是净跨的多少 钢筋混凝土大梁最大跨度是多少 钢筋混凝土框架结构(3层住宅)梁的经济跨度是多少? 建筑柱间距的大小距离? 框架结构柱子间距规范是什么 现浇混凝土框架结构楼板双向板跨度一般做多大? 一般框架结构办公楼的房间跨度及进深是多少 框架结构的柱的经济跨度是多少 钢结构一般跨度多大比较经济合理 建筑中柱子之间的距离多少为好? 框架结构 梁的跨度和高度 在建筑中,柱与柱之间的最大距离是多少? 框架结构柱间距(梁跨度)最大是多少?9m可行吗? 混凝土框架梁允许最大跨度多少? 框架结构跨度为多少算为大跨度结构 上海191路公交车路线时刻表 杭州191路公交车路线 广州公交191路路线图 郑州191公交车路线查询 嘉兴191路公交车路线从嘉兴始发站是哪里呢? 静海公交191发车时间表? 想知道: 淄博市 191公交线路的信息 桐乡公交车K191路线是什么 想知道: 嘉兴市 191公交线路的信息 天津191路公交车路过静海区禹州吗? 城站火车站至运河村路公交车路线 濮院到嘉兴公交时刻表 谢家塘到杭州东站 公交路线怎么走 191公交车路线到濮院菜市场到哪下 广州公交车路线查询 嘉兴至桐乡191行驶路线中哪一站离乌镇最近 温江到成都电孑科技大学成都学院怎么乘车? 191路公交车到濮院帅妞距那个站牌近 嘉兴191路公交车路线4月30日桐乡到濮院永乐路囗什么地方下车? 怎样将excel中两列不同的数找出来