C#堆和栈的区别

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

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

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

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

1,申请方式

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

stack(栈):由系统分配。

2,申请效率

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

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

3,存储的数据类型

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

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

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

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

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

你可能感兴趣的:(服务器端,算法,数据结构,java,c#)