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)。
就和手枪子弹的弹夹一样,最后一粒压进去的子弹,最先被弹出来。
应用如:河内塔的盘子存放。
Queue(队列)的特点为FILO
即后进先出(First in, last out)。
就和排队过山洞一样,最先进去的,最先出来。
https://www.cnblogs.com/hongdada/p/6464158.html