zoukankan      html  css  js  c++  java
  • 【概念】堆、栈、引用类型、值类型

    一、数据类型

    (1)值类型
    1、概念
    值类型变量可以直接分配给它一个值。
    值类型直接包含数据。系统分配内存来存储值。

    eg:int、char、float、long
    enum、struct

    2、存储
    值类型总是分配在它声明的地方。
    做为局部变量时,存储在栈上;
    做为类对象的字段时,则跟随此类存储在堆中。

    (2)引用类型
    1、概念
    引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。
    引用类型的值(对象)是引用类型的一个实例。

    换句话说,它们指的是一个内存位置。

    使用多个变量时,引用类型可以指向一个内存位置。
    如果内存位置的数据是由一个变量改变的,其他变量会自动反映这种值的变化。

    类、接口、数组都属于引用类型
    eg:object、string、interface、int[]、Hashtable

    delegate、class

    2、存储
    引用类型存储在堆中。
    类型实例化的时候,会在堆中开辟一部分空间存储类的实例。
    类对象的引用存储在栈中。


    (3)区别
    1、在给引用类型的变量赋值的时候,只是赋值了对象的引用。当我们使用引用类型时,实际上只是在处理该类型的指针。而非引用类型本身,
    2、给值类型变量赋值的时候是创建了一个副本(克隆了一个变量)。使用值类型时是使用其本身。

    1 Student s = new Student();
    2 s.age = 10;
    3 Student s2 = s;//给引用类型的变量赋值的时候,其实只是赋值了对象的引用;
    4 
    5 
    6 int a = 0;
    7 int a2 = a;//给值类型变量赋值的时候是创建了一个副本


    (3)指针类型

    二、堆、栈

    (1)概念
    1、堆

    在c里叫堆,在c#里叫托管堆。
    托管堆不同于堆,它是由CLR(公共语言运行库(Common Language Runtime))管理。
    当堆中满了之后,会自动清理堆中的垃圾。所以,做为.net开发,我们不需要关心内存释放的问题。

    2、栈
    是一种抽象数据结构,它拥有以下特性:

    1)只能存堆栈的顶端存取数据数据;
    2)满足"后进先出的原则"。

    (其实就如同餐盘向餐桌上一个一个叠放,使用餐盘时需要从最顶端往下拿,这就是典型堆栈概念的应用)

    (2)数据结构堆栈
    1、堆
    堆是无序的,是一片不连续的内存域,如果用户自己不释放的话,当内存达到一定的特定值时,通过垃圾回收器(GC)来回收。

    2、栈
    保持着先进后出的原则,是一片连续的内存域,有系统自动分配和维护。


    (3)内存堆栈
    存在内存中的两个存储区:

    1、栈区:存放函数的参数、局部变量、返回数据等值,由编译器自动释放。
    栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义。

    2、堆区:存放着引用类型的对象,由CLR释放
    堆是程序运行期间动态分配的内存空间,可以根据程序的运行情况确定要分配的堆内存的大小。


    上文提及的栈(Stack),在程序运行的时候,每个线程(Thread)都会维护一个自己的专属线程堆栈。
    当一个方法被调用的时候,主线程开始在所属程序集的元数据中,查找被调用方法。
    然后通过JIT即时编译并把结果(一般是本地CPU指令)放在栈顶。
    CPU通过总线从栈顶取指令,驱动程序以执行下去。

    来源:

    https://www.runoob.com/csharp/csharp-data-types.html

    https://www.cnblogs.com/codingsilence/archive/2011/02/28/2146584.html

    /*******相与枕藉乎舟中,不知东方之既白*******/
  • 相关阅读:
    angularjs 判断是否包含 permIDs|filter:'10'
    js日期格式化
    JSON格式检验
    CodeSmith Generator 6.5
    Hosts文件说明
    正则表达式匹配换行实例代码
    Codeforces 311E Biologist
    URAL 1349 Farm
    [SDOI2015] 序列统计
    洛谷 P3803 多项式乘法
  • 原文地址:https://www.cnblogs.com/Mars-0603/p/13627251.html
Copyright © 2011-2022 走看看