C#培训2019-10-25 关于Stack(堆)和Heap(栈)以及Stack(堆栈)和Queue(队列)

前言:首先Stack在C#中有两种含义:①数据结构:堆栈(Stack),与之对应的是Queue(队列);②内存地址:堆(Stack),与之对应的是Heap(栈)。

一、内存地址:堆(Stack)和栈(Heap / [hiːp])

Stack(堆):一般为函数调用时候用的,内存很少(1~2M)
Heap (栈) :一般用作储存对象/实例,内存较大(几个G)

数据存放的规则是:只要是局部的、占用空间确定的数据,一般都存放在stack里面,否则就放在heap里面。

由于Stack的内存较小,因此某些情况下会发生栈溢出,如:只递不归。

可以根据数据类型,来判断是存放在Stack还是Heap中的

C#中五大数据类型如下:

数据类型 范例
(Classes) Windows;Form;Console;String //class
结构体(Structrues) Int32;Int64;Single;Double //struct
枚举(Enumerations) HorizontalAlignment;Visibility //enum
接口(Inteerfaces)
委托(Delegates)
其中,引用类型有:接口委托。值类型有结构体枚举

二、数据结构:堆栈(Stack)和队列(Queue / [kjuː])

Stack(堆栈)的特点为LIFO,即后进先出(Last in, first out)。

C#培训2019-10-25 关于Stack(堆)和Heap(栈)以及Stack(堆栈)和Queue(队列)
就和手枪子弹的弹夹一样,最后一粒压进去的子弹,最先被弹出来。
应用如:河内塔的盘子存放。

Queue(队列)的特点为FILO即后进先出(First in, last out)。

就和排队过山洞一样,最先进去的,最先出来。

https://www.cnblogs.com/hongdada/p/6464158.html