C#堆和栈的区别

栈:全称是线程堆栈,英文 Stack
堆:全称是托管堆,英文Heap

解释1
栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;
堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小

栈由系统分配内存大小
堆由程序员自己申请

解释2
存放在栈中时要管存储顺序,保持着先进后出的原则,它是一片连续的内存域,由系统自动分配和维护。
而堆是无序的,它是一片不连续的内存域由有用户自己来控制和释放,如果用户自己不释放的话,当内存达到一定的特定值时,通过垃圾回收器(GC)来回收。

1,申请方式

heap(堆):程序员自己申请,并指明大小。

stack(栈):由系统分配。

2,申请效率

heap(堆):由new分配的内存,相对效率和速度都较低,且容易产生碎片,但由于是程序员自己申请操作,灵活性强,使用方便。

stack(栈):效率较高,速度较快,但程序员无法对其进行控制。

3,存储的数据类型

heap(堆):存储引用类型。比如:类、接口、数组等。
stack(栈):存储值类型,即存储固定长度的数据。比如:整数、字符、结构、布尔、枚举等。每个程序在执行时都有自己的堆栈,其他程序不能访问该堆栈。

堆栈和内存和寄存器关系
内存是CPU和硬盘之间的通道.

内存如同一个仓库,堆,栈是仓库中开辟的一个规则有序的仓库区,而寄存器就是生产线上的一个容器。

堆,栈是属于内存区的一部分,堆,栈是内存中的一种数据结构.

而寄存器则是CPU中的一部分。寄存器是CPU的存储器.速度快.

“堆”、"栈"、"堆栈"、"队列"的区别是:
堆在内存中,随意读取数据,无限制;
栈只能后进先出的读取;
堆栈是栈的一种抽象表述,规定了基本动作;
队列只能先进先出的读取。

“堆”、"栈"、"堆栈"、"队列"四种概念:
堆是动态分配的内存,特点是方便随意读取;
栈是一种限制性读取的线性表,特点是后进先出;
堆栈是栈的一种抽象,定义了栈的基本操作;
队列是一种限制性读取的线性表,特点是先进先出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值