值类型和引用类型的区别 I 数据结构中的堆和栈和内存中的堆和栈的区别

值类型和引用类型的区别 I 数据结构中的堆和栈和内存中的堆和栈的区别

  • 一、值类型和引用类型
  • 二、值类型和引用类型的区别
  • 三、数据结构中的堆和栈和内存中的堆和栈的区别
    • (一)数据结构中的堆和栈
      • 1.栈:装数据的桶或者箱子
      • 2.堆:一颗倒立的大树
    • (二)内存中的堆和栈

一、值类型和引用类型

类型 数据类型
值类型 Int float bool char struct enum
引用类型 string class interface delegate array

二、值类型和引用类型的区别

  1. 值类型存储快,引用类型存储慢
  2. 值类型表示实际的数据,引用类型表示指向存储在内存中数据的指针和引用
  3. 值类型继承自System.valueType,引用类型继承自System.Object
  4. 值类型存储在栈中,引用类型存储在堆中
  5. 栈内的内存会自动释放,堆中的内存由.NET中的GC自动释放

三、数据结构中的堆和栈和内存中的堆和栈的区别

(一)数据结构中的堆和栈

堆和栈都是一种数据项按序排列的数据结构

1.栈:装数据的桶或者箱子

栈是一种具有后进先出的数据结构,也就是说后存放的先取,先存放的后取,这就类似于我们要在取放在箱子底部的东西,我们首先要移开压在它上面的物体。

2.堆:一颗倒立的大树

堆是一种经过排序的树形数据结构,每个节点都有一个值。通常我们所说的堆的数据结构是指二叉树。堆的特点是根节点的值最小(或最大),且根节点的两个树也是一个堆。由于堆的这个特性,常用来实现优先队列,堆的存取是随意的,这就如同我们在图书馆的书架上取书,虽然书的摆放是有顺序的,但是我们想取任意一本时不必像栈一样,先取出前面所有的书,书架这种机制不同于箱子,我们可以直接取出我们想要的书。

(二)内存中的堆和栈

内存中的栈区处于相对较高的地址,以地址的增长方向为上的话,栈地址是向下增长的

栈中分配局部变量空间,堆区是向上增长的用于分配程序员申请的内存空间。另外还有静态区是分配静态变量,全局变量空间的。只读区是分配常量和程序代码空间的;以及其他一些分区。

你可能感兴趣的:(Unity,/,C#,学习笔记,C#)