堆 、 栈、 堆栈 、队列、装箱、拆箱

堆(heap):堆是一种经过排序的树形数据结构,每个结点都有一个值。存储引用类型

栈(stack):它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。存储值类型


有人老是搞不清楚内存堆栈与数据结构堆栈,我们来看看什么是内存堆栈,什么是数据结构堆栈

①数据结构堆栈:是一种后进先出的数据结构,它是一个概念,图4-1中可以看出,栈是一种后进先出的数据结构。

②内存堆栈:存在内存中的两个存储区(堆区,栈区)。

栈区:存放函数的参数、局部变量、返回数据等值,由编译器自动释放

堆区:存放着引用类型的对象,由CLR释放


堆栈通常是指栈。

值类型分配在 内存栈中

引用类型存储在内存堆中,若声明一个引用类型的变量,该变量只存储在内存堆上的引用类型的实例化的内存地址,也就是说该变量所代表的不是这个变量值的本身,而是该变量值的一个内存地址。 则该引用类型只存储该变量实例化中在内存堆中的内存地址。

装箱:把值类型转变成引用类型

int  i=5;

object bates=i;

Debug.Log(i)

拆箱:把一个已经装箱的引用类型转变成值类型

int i=5;
object bat=i;
int j=(int)(bat);
Debug.Log(j);

在对值类型进行装箱操作时,所使用的时间比直接赋值多20倍;拆箱操作时,所使用的时间比直接赋值多4倍。

堆栈不是指堆和栈,堆是一种类型,栈是另一种类型。它们是不同的;堆栈是指栈
小猪大牛的强行解释

栈中保存引用类型变量和值类型变量,值类型变量保存的是值类型实例的值,引用类型变量保存的是引用类型实例的引用。 对象的引用 是保存的 指向堆中的 地址的指针,堆中保存的才是对象实例

关于值类型和引用类型的区别

堆栈:

堆栈定义
堆栈(Stack)代表了一个后进先出的对象集合。
当您需要对各项进行后进先出的访问时,则使用堆栈。当您在列表中添加一项,称为推入元素,当您从列表中移除一项时,称为弹出元素。

Count : 获取 Stack 中包含的元素个数。
Contains: 判断某个元素是否在堆栈中。
Push:压榨、入栈,向 Stack 的顶部添加一个对象。
Pop:移除堆栈中顶部的元素
Peek:返回堆栈中的顶部元素,但不删除。

Unity3d使用堆栈

队列:

队列定义
队列(Queue)代表了一个先进先出的对象集合。
当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。

Clear:移除所有的元素。
Conut:获取Queue中元素个数。
Contains:判断某个元素是否在 Queue 中。
Dequeue:移除并返回在 Queue 的开头的对象。
Enqueue:向 Queue 的末尾添加一个对象。
TrimToSize:设置容量为 Queue 中元素的实际个数。

Unity3d使用队列

堆 、 栈、 堆栈 、队列、装箱、拆箱_第1张图片
队列和堆栈.png

你可能感兴趣的:(堆 、 栈、 堆栈 、队列、装箱、拆箱)