精华内容
下载资源
问答
  • 关于 “引用类型保存在堆上,值类型保存栈上”是不准确的 关于 堆栈 早期的理解是 内存的两块区域。 呢 速度快 但是 比较小。二栈呢 速度稍慢,但是空间比较大。 早期 关于 说道 值类型 和 引用类型的时候...

    关于 “引用类型保存在堆上,值类型保存在栈上”是不准确的

        关于 堆栈 早期的理解是 内存的两块区域。呢 速度快 但是 比较小。呢 速度稍慢,但是空间比较大。

      栈(Stack)

    • 栈是一种只能先进后出的内存结构。
    • 栈只能在一端对数据进行操作,也就是栈顶端进行操作。
    • 栈也是一种内存自我管理的结构,压栈自动分配内存,出栈自动清空所占内存
    • 栈中的内存不能动态请求,只能为大小确定的数据分配内存,灵活性不高,但是栈的执行效率很高
    • 栈的可用空间并不大,所以我们在操作分配到栈上的数据时要注意数据的大小带来的影响

      堆(Heap)

    • 相比栈只能在一端操作,堆中的数据可以随意存取。
    • 能存储大量数据,而且堆能够动态分配存储空间
    • 但堆的结构使得堆的执行效率不如栈高,而且不能自动回收使用过的对象

          在早期 关于 说道 值类型 和 引用类型的时候 经常说 :值类型一般是在 里面,而引用类型则在 里面存放是的引用的地址,而真是的值 是在 里面!。 当时想着想着 又有哪里不对。 应为当类里面包含 值类型的时候 那这个类的实例 又该在哪里呢? 后来随着学习的深入 。发现这样的说法是不完全正确的!

    那么变量的值在内存空间 究竟是如何分配的呢?

    通常来讲 变量的值分配 与其声明该变量的位置有关。 局部变量的值 总是在 栈上的。 实例变量的值则和实例本身一起储存在实例储存的地方。 引用类型实例和静态总是储存在上的。

            之所以说 值类型的实例一般分配在上而非 全部分配在上的原因是由一下几种情况, 值类型也有可能分配在上。

            这些特殊的情况包括数数组的元素、引用类型中的值类型字段、法代器块中的局部变量、闭包情况下匿名函数( Lamda )中的局部变量。这是由于在这几种情况下的值类型实例如果分配在 线程栈上,有可能会出现线程技中的方法己经调用结束,但是还会访问这些值的情况。也就是说如果分配在 线程栈上,有可能会随着被调用方法的返回而被清除掉。因此它们也被分配在了托管堆上,以满足在方法返回之后还能够被访问的要求。所以单纯地说“引用类型保存在托管堆上,值类型保存在线程栈上”是不准确的。将这句话一分为二看待,引用类型的确总是分配在托管堆上, 但是值类型并非总是分配在线程栈上有可能分配在堆

           那么在C#语言中,到底哪些类型可以归为是引用类型,又有哪些类型应该被归为值类型呢?根据ECMA 的C#语言规范CECMA”334 规范)或者微软官方的C#语言规范,任何被称为“类”的类型都是引用类型。并且通常使用以下3 个关键字来声明一个自己定义的引用类型。

    • Class"
    • Interface
    • Delegate
    当然,在C#中也有一些内建的引用类型。
    • Dynamico
    • Objecto
    • string 。

    在C#中,继承自System.ValueType的类型被称为值类型,主要有以下几种(CLR2.0中支持类型有增加):
        * bool
        * byte
        * char
        * decimal
        * double
        * enum
        * float
        * int
        * long
        * sbyte
        * short
        * struct
        * uint
        * ulong
        * ushort

     

    总结:

    值类型和引用类型在栈和堆中的分配

    1.创建引用类型时,runtime会为其分配两个空间,一块空间分配在堆上,存储引用类型本身的数据,另一个块空间分配在栈上,存储对堆上数据的引用,实际上存储的堆上的内存地址,也就是指针。

    2.创建值类型时, runtime会为其分配一个空间,这个空间分配在变量创建的地方,如:

    • 如果值类型是在方法内部创建,则跟随方法入栈,分配到栈上存储。
    • 如果值类型是引用类型的成员变量,则跟随引用类型,存储在堆上。(对象的成员变量)
    展开全文
  • 今天来捋一捋值类型和引用类型各是哪里存储的,?还是栈? 首先值类型和引用类型,是C#中变量的两种类型。值类型包括我们常用的整型、浮点型、布尔型数值、枚举等。引用类型包括类、接口、数组、委托等。 至于...

    今天来捋一捋值类型和引用类型各是在哪里存储的,堆?还是栈?

    首先值类型和引用类型,是C#中变量的两种类型。值类型包括我们常用的整型、浮点型、布尔型数值、枚举等。引用类型包括类、接口、数组、委托等。

    至于堆和栈,是两种不同的内存区域,堆(heap),栈(即堆栈(stack))

    简单来说,值类型和引用类型变量本身在栈中分配内存,引用类型的实例在堆中分配内存。(要注意的是,一定要理解清楚引用类型变量本身和引用类型的实例的区别,引用类型变量好比一个指针,它所指向的内容即引用类型的实例)。有时候又会看到一些说法,值类型在其所定义的位置分配内存,这让人感到很混乱却也不得不在意,下面简单捋一下。

    如下面代码:

    public class TestClass 
    {
          int a = 0;
    }
    
    public void Function()
    {
         int b = 0;
         TestClass class1 = new TestClass();
    ​​​​​​​}

    方法Function中定义的值类型(整型b)在栈中分配,引用类型(类class1)以一个类似于指针的形式也存储于栈中,而类的实例对象即代码中class1所引用的实际数据(整型a)是在堆上面分配的。这就可以理解,为什么有的地方会说“值类型在其所定义的地方分配”,因为上述代码中的值类型a由于定义在类中,作为类的一个成员,在类实例化时是被分配到堆中的。

    因此,更进一步地,可以理解为:值类型作为一个方法中的局部变量时,是在栈中分配的,而当作为类的成员变量时,是分配在堆中的

    在上面代码的TestClass中添加一个Run函数:

    public class TestClass 
    {
        int a = 0;
        public void Run()
        {
            int c = 0;
        }
    }
    
    public void Function()
    {
        int b = 0;
        TestClass class1 = new TestClass();
        class1.Run();
    ​​​​​​​}

    此时,整型a是在堆中分配内存,而Run函数中的整型c在栈中分配内存。

    因此关于值类型、引用类型各自在堆或栈上的内存分配可以总结为:

    >>>!!!值类型作为方法中的局部变量时,在栈中分配,而作为类的成员变量时,在堆中分配;引用类型变量在栈中分配,引用类型的实例在堆中分配!!!<<<。

    (梳理了一下自己的思路,对知识点的理解更清晰了,若有误还望指正啦。)

    展开全文
  • 要彻底搞明白那一概念及其它们之间的关系似乎并不是一件容易的事,这是因为大部分C#程序员并不了解托管(简称“”)和线程栈(简称“栈”),或者知道它们,但了解得并不深入,只知道:引用类型保存在托管里...
  • 一个数据项需要多大的内存、存储什么地方、以及如何存储都依赖于该数据项的类型。 运行中的程序使用两个内存区域来存储数据:栈和。 1、栈 栈是一个内存数组,是一个LIFO(last-in first-out,后进先出)的...

    一、栈和堆是什么

    程序运行时,它的数据必须存储在内存中。一个数据项需要多大的内存、存储在什么地方、以及如何存储都依赖于该数据项的类型。

    运行中的程序使用两个内存区域来存储数据:栈和堆。

    1、栈

    栈是一个内存数组,是一个LIFO(last-in first-out,后进先出)的数据结构。栈存储几种类型的数据:某些类型变量的值、程序当前的执行环境、传递给方法的参数。

    栈的特点:(1)数据只能从栈的顶端插入和删除。(2)把数据放到栈顶称为入栈。(3)从栈顶删除数据称为出栈。

    2、堆

    堆是一块内存区域,在堆里可以分配大块的内存用于存储某种类型的数据对象。与栈不同,堆里的内存能够以任意顺序存入和移除。下图展示了一个在堆里放了4项数据的程序。

    虽然程序可以在堆里保存数据,但并不能显式地删除它们。CLR的自动垃圾收集器在判断出程序的代码将不会再访问某数据项时,会自动清除无主的堆对象。下图阐明了垃圾收集过程。

    二、值类型和引用类型

    C#中的值类型和引用类型大致如下图所示

    程序的数据项的类型定义了存储数据需要的内存大小以及组成该类型的数据成员。类型还决定了对象在内存中的存储位置——栈或堆。

    值类型与引用类型的存储方式:

    值类型:值类型只需要一段单独的内存,用于存储实际的数据。

    引用类型:引用类型需要两段内存,第一段存储实际的数据,它总是位于堆中。第二段是一个引用,指向数据在堆中的存放位置。


    问题:如下代码所示,我们都说值类型存在于栈中,引用类型的实际数据在栈中,引用存在堆中。那么下面的代码,当实例化 Student stu=new Student()时,那么Age属于值类型会存在于栈中吗?StudentAddress属于引用类型,会在栈和堆之间分成两半吗?答案是否定的。

    public class Student
    { 
        public int Age { get; set; }
        public string Name { get; set; }
        public Address StudentAddress { get; set; }
    }
    public class Address
    {
    
       public string address { get; set; }
    }

    请记住,对于一个引用类型,其实例的数据部分始终存放在堆里。既然两个成员都是对象数据的一部分,那么它们都会被存放在堆里,无论它们是值类型还是引用类型。如下图所示:

    尽管成员Age是值类型,但它也是new Student()实例数据的一部分,因此和对象的数据一起被存放在堆里。

    成员StudentAddress是引用类型,所以它的数据部分会始终存放在堆里,正如图中“数据”框所示。不同的是,它的引用部分也被存放在堆里,封装在new Student()对象的数据部分中。

    说明:对于引用类型的任何对象,它所有的数据成员都存放在堆里,无论它们是值类型还是引用类型。

    三、申明变量时,内存是如何变化的?

    当你在一个.NET应用程序中定义一个变量时,在RAM中会为其分配一些内存块。这块内存有三样东西:变量的名称、变量的数据类型以及变量的值。

    在.NET中有两种可分配的内存:栈和堆。你的变量究竟会被分配到哪种类型的内存取决于数据类型。在接下来的几个部分中,详细地说明这两种类型的存储。

    Line 1:当这一行被执行后,编译器会在栈上分配一小块内存。栈会在负责跟踪你的应用程序中是否有运行内存需要。

    .Net(C#)编程语言中的栈与堆

    Line 2:现在将会执行第二步。栈会将此处的一小块内存分配叠加在刚刚第一步的内存分配的顶部。你可以认为栈就是一个一个叠加起来的房间或盒子。在栈中,数据的分配和解除都会通过LIFO (Last In First Out)即先进后出的逻辑规则进行。换句话说,也就是最先进入栈中的数据项有可能最后才会出栈。

    .Net(C#)编程语言中的栈与堆

    Line 3:在第三行中,我们创建了一个对象。当这一行被执行后,.NET会在栈中创建一个指针,而实际的对象将会存储到一个叫做“堆”的内存区域中。“堆”不会监测运行内存,它只是能够被随时访问到的一堆对象而已。不同于栈,堆用于动态内存的分配。

    需要注意的重点是对象的引用指针是分配在栈上的。 例如:声明语句 Class1 cls1; 其实并没有为Class1的实例分配内存,它只是在栈上为变量cls1创建了一个引用指针(并且将其默认值为null)。只有当其遇到new关键字时,它才会在堆上为对象分配内存。

    .Net(C#)编程语言中的栈与堆

    离开这个Method1方法时:现在执行的控制语句开始离开方法体,这时所有在栈上为变量所分配的内存空间都会被清除。换句话说,在上面的示例中所有与int类型相关的变量将会按照“LIFO”后进先出的方式从栈中一个一个地出栈。

    注意:这时它并不会释放堆中的内存块,堆中的内存块将会由垃圾回收器稍候进行清理。

    .Net(C#)编程语言中的栈与堆

    四、总结

    Heap space 堆空间: 所有存活的对象在此分配.

    Stack space 栈空间: 方法调用时保存变量对象的引用或变量实例.

    在C#中只要是成员变量,一旦它所在类被实例化后,都是作为一个整体放在堆内存的,不管它是值类型还是引用类型。局部变量才是放在栈内存的。而类的方法是所有的对象共享的,方法是存在方法区的,只用当调用的时候才会被压栈,不用的时候是占内存的。

    简单来说,值类型和引用类型变量本身在栈中分配内存,引用类型的实例在堆中分配内存。(要注意的是,一定要理解清楚引用类型变量本身和引用类型的实例的区别,引用类型变量好比一个指针,它所指向的内容即引用类型的实例)。有时候又会看到一些说法,值类型在其所定义的位置分配内存,这让人感到很混乱却也不得不在意,下面简单捋一下。

    如下面代码:

    public class TestClass 
    {
          int a = 0;
    }
     
    public void Function()
    {
         int b = 0;
         TestClass class1 = new TestClass();
    }

    方法Function中定义的值类型(int b)在栈中分配,引用类型(类class1)以一个类似于指针的形式也存储于栈中,而类的实例对象即代码中class1所引用的实际数据(整型a)是在堆上面分配的。这就可以理解,为什么有的地方会说“值类型在其所定义的地方分配”,因为上述代码中的值类型a由于定义在类中,作为类的一个成员,在类实例化时是被分配到堆中的。

    因此,更进一步地,可以理解为:值类型作为一个方法中的局部变量时,是在栈中分配的,而当作为类的成员变量时,是分配在堆中的

    在上面代码的TestClass中添加一个Run函数:

    public class TestClass 
    {
        int a = 0;
        public void Run()
        {
            int c = 0;
        }
    }
     
    public void Function()
    {
        int b = 0;
        TestClass class1 = new TestClass();
        class1.Run();
    }

    此时,整型a是在堆中分配内存,而Run函数中的整型c在栈中分配内存。

    因此关于值类型、引用类型各自在堆或栈上的内存分配可以总结为:

    值类型作为方法中的局部变量时,在栈中分配,而作为类的成员变量时,在堆中分配;引用类型变量在栈中分配,引用类型的实例在堆中分配

     

    展开全文
  • 转自《发掘 C# 特性赋予科学计算项目以威力》 ... 引用类型总是在堆中分配(除非使用 stackalloc 关键字),并给予一个额外的间接层;也即,它们需要通过对其存储位置的引用来访问。既然这些类型不能直接访问, 某个引
     转自《发掘 C# 特性赋予科学计算项目以威力》 原著:Fahad Gilani 翻译:yy2better
    
    英文出处 中文译稿

      C#中对象类型主要有两种——引用类型(重量级对象)和值类型(轻量级对象)。

      引用类型总是在堆中分配(除非使用 stackalloc 关键字),并给予一个额外的间接层;也即,它们需要通过对其存储位置的引用来访问。既然这些类型不能直接访问, 某个引用类型的变量总是保存实际对象的引用(或 null ) 而不是对象本身。假设引用类型在堆中分配,运行时必须确保每个分配请求被正确执行。考虑下面代码,它执行一次成功的分配:
    Matrix m = new Matrix(100, 100);

      其幕后执行是:CLR内存管理器收到分配请求,它会计算存储该对象包括头部和类变量所需的内存数量。然后内存管理器检查堆中可用空闲空间,以确认是否有足够空间供这次分配。如果有,对象 所需空间会被成功分配并且对其存储地址的引用也会被返回。如果没有足够空间存储对象,垃圾收集器将被启动去释放一些空间并进行堆紧缩操作。

      如果执行成功,为了保持后续的垃圾收集操作,内存管理器将对象写入内存前还必须采取另一个重要步骤。这一步骤涉及产生一块称作写屏障(write barrier)的代码(垃圾收集器的实现细节超出本文范围)。相反地,每当有对象被写入内存或 者当对象在内存中产生对另一个对象的引用(例如原先存在对象指向新创建对象),运行时便生成写屏障。垃圾收集器功能实现的许多复杂性之一是要记住这些对象的存在 可写性,因而在收集过程中它们不会被误收集,虽然它们是被毫不相关的另一个对象所指向的对象。正如你可能会猜测,这些写屏障招致小的运行时开销,所以对于科学 计算应用来说,在运行过程中创建数百万对象不是理想场景。

      值类型被直接存储在栈中(虽然此规则有例外,我马上会讲到)。值类型不需要间接层,所以值类型变量总保存自身实际值而不能将引用保存为其它类型(因而,它们也就不能为 null)。使用值类型主要优点是它们的分配只产生很小的运行时开销。分配它们时,只是简单增加栈指针并且不需要被内存管理器管理。这些对象决不调用垃圾收集功能。此外,值类型不生成写屏障。

      C#中,简单数据类型(int,float,byte)、枚举类型和结构(struct)类型都是值类型。虽然前面我讲过值类型直接存储在栈中,但我没有使用“总是”,正如我论述引用类型时一样。 包含在引用类型内的值类型不会被存储在栈中,而是堆中,它被包含于引用类型对象中。例如,看看下面代码片段:
    class Point
    {
      private double x, y;

      public Point (double x, double y)
      {
        this.x = x;
        this.y = y;
      }
    }

      这个类的一个实例占用24字节,其中8字节用于对象头,剩余16字节用于两个双精度变量x和y。与此同时, 引用类型是包含在值类型对象中的(例如,结构中包含数组) ,它不会导致整个对象在堆中分配。只有数组在堆中分配,对该数组的引用被置于在栈中存放的结构中。

      值类型派生于 System.ValueType,它本身又派生于 System.Object。因为这个,值类型具备像类一样的特征。值类型有构造函数(除了无参数构造函数)、索引指示器(indexer)、方法和重载运算符,它们也能实现接口。然而,它们不能被继承,也不能从其 它类型继承。这些对象容易成为 JIT 优化因素,因为它们生成有效、高性能代码。

      这里有一个警告:极其容易意外地将值类型设陷为一个对象,从而导致在堆中分配它——众所周知,这就是装箱(boxing)技术。确信你的代码 不会进行在不必要的值装箱操作,否则将失去最初得到的性能。另一个警告是: 值类型数组(例如双精度或整型数组)是在堆中存放,而不是栈中。只有保存数组引用的值是存放在栈中。这是因为所有数组类型都隐含派生于System.Array,它们都是引用类型。

    ----------------

    雨痕附注:
    1. 将值类型转换为其实现的接口时,也将进行装箱操作,因为接口是引用类型。
    2. 值类型数组虽然分配在堆上,但数组元素依然是值类型,并没有被装箱。
    3. 引用对象的值类型成员也随对象一起分配在堆上,同样也还是值类型,没有被装箱。

    展开全文
  • 本文会阐述六个重要的概念:、栈、值类型、引用类型、装箱和拆箱。本文首先会通过阐述当你定义一个变量之后系统内部发生的改变开始讲解,然后将关注点转移到存储双雄:和栈。之后,我们会探
  • 引用类型、基本类型、、栈

    千次阅读 2015-11-08 19:10:04
    引用类型和基本类型的区别与联系: 要明白这个问题,首先需要理解堆栈的概念。那什么又是堆栈,有什么区别和联系呢? :首先是动态分配的,JVM并不会自动释放这部分内存。只用等待系统的gc来进行内存回收...
  • 当我们把变量赋值给一个变量时,解析器首先要确认的就是这个值是基本类型值还是引用类型值 基本数据类型:数字(Number)、字符串(String)、布尔(Boolean)、空(Null)、未定义(Undefined) 引用数据类型:也就是...
  • 2.引用类型:表示指向存储内存中的数据的指针或引用(包括类、接口、数组和字符串)。 C#中定义的值类型包括原类型(Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、Decimal...
  • 引用类型值:按引用访问,当查询时,我们需要先从栈中读取内存地址,然后再顺藤摸瓜地找到保存在堆内存中的值; 下面就分别介绍一下javascript的这两种数据类型。 一.基本数据类型: javascript中存在着六种基本...
  • 引用类型值:指的是那些保存在堆内存中的对象,意思是,变量中保存的实际上只是一个指针,这个指针指向内存中的另一个位置,由该位置保存对象; 两种访问方式: 基本类型值:按值访问,操作的是他们实际保存的值; ...
  • JVM基础概念总结:数据类型、与栈、基本类型与引用类型   Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。...
  • c#中提供的数据类型有两类,值类型...引用类型在堆中分配存储单元。 其中对于栈和的理解参考知乎。 链接:https://www.zhihu.com/question/19729973/answer/13037929 这里的 应该指的是heap而非数据结构中的
  • 基本类型(5个): undefined null boolean number string ...引用类型的值是对象,保存在堆内存中 引用类型的变量实际上是一个指针,它保存在栈中,指向内存中的对象 复制引用类型变量实际是复制该指针,所以他们都
  • 2、引用类型分配托管上,引用类型的变量通常包含一个指向实例的指针,变量通过该指针来引用实例。3、值类型继承自ValueType(注意:而System.ValueType又继承自System.Object);而引用类型继承自System.Object...
  • 还有托管,栈,ref,out等等概念也是每个C#程序员都会接触到的概念,也是C#程序员面试经常考到的知识,随便搜搜也有无数的文章讲解相关的概念,貌似没写一篇值类型,引用类型相关博客的不是好的C#程序员。...
  • C#详解值类型和引用类型区别

    万次阅读 多人点赞 2016-04-20 17:59:42
    C#中值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储数据中。 值类型(value type):byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。值...
  • 栈内存是用来存放函数中定义的一些基本类型的变量和对象的引用变量 例子: 局部变量,函数调用参数,函数返回值,函数返回地址存放栈; new函数和malloc函数申请的内存在 和栈的区别 1、栈区(stack)— 由...
  • C# - 值类型与引用类型

    万次阅读 2019-02-28 19:52:35
    值类型直接存储其值,变量本身就包含了其实例数据,而引用类型保存的只是实例数据的内存引用。因此,一个值类型变量永远不会影响到其他的值类型变量,而两个引用类型变量则很有可能指向同一地址,从而产生相互影响。...
  • java基本类型与引用类型

    万次阅读 多人点赞 2018-01-04 17:30:32
    java基本类型与引用类型 目录 java基本类型与引用类型 目录 一基本数据类型 二引用类型 三基本类型与引用类型的区别 默认值 内存分配 自动装箱自动拆箱 自动装箱拆箱带来的问题 程序的性能 空指针异常 ...
  • 值类型和引用类型

    千次阅读 热门讨论 2019-01-02 20:18:16
    注:引用类型当声明一个类时,只栈中分配一小片内存用于容纳一个地址,而此时并没有为其分配上的内存空间,当使用new 创建一个类的实例时,分配上的空间,并把上空间的地址保存到栈上分配的小片空间中。...
  • 关于值类型和引用类型的相关问题

    千次阅读 2019-12-18 00:40:31
    1、什么是值类型?...值类型保存的是具体的值,引用类型保存的是值得地址,例如: Console.WriteLine("值类型,保存的是具体的值"); int x = 1; int y = x; y = y + x; Console.WriteLine("x:" ...
  • js基本类型与引用类型

    千次阅读 多人点赞 2018-06-15 11:21:22
    1.基本类型:Underfined ,...而对象,以及被装箱的数据放在中栈内存中存放地址指向内存中的对象基本类型就是保存在栈内存中的简单数据段,而引用类型指的是那些保存在堆内存中的对象基本类型内存中分别占有固...
  • Java引用类型

    千次阅读 2016-03-16 19:12:55
    博主最近整理Java集合框架时,整理到WeakHashMap的时候,觉得有必要先阐述一下Java的引用类型,故此先整理的这篇文章,希望各位多提提意见。   闲话不多说,直接进入主题。Java中提供了4个级别的引用:强引用...
  • Java 基本类型与引用类型

    千次阅读 多人点赞 2019-03-27 20:55:51
    Java 基本类型与引用类型 一、基本数据类型 java 中一共分为 8 种基本数据类型:byte、short、int、long、float、double、char、boolean, 其中 byte、short、int、long 是整型。float、double 是浮点型,char 是...
  • JavaScript基本类型和引用类型的值

    千次阅读 2015-11-01 21:35:37
    JS变量可能包含两种不同数据类型的值;基本类型值和引用类型值。基本类型指的是简单的数据段,而引用类型值那些由多个值构成的对象; 将一个值赋给变量时,解析器必须确定这个值是基本...引用类型的值保存在内存中的
  • JAVA中的引用四种引用类型

    千次阅读 2020-08-30 10:09:38
    关于值类型和引用类型的话题,C++、JAVA、python、go、C#等等高级语言都有相关的概念,只要理解了其底层工作原理,可以说即使是不同的语言,面试学习工作实践中都可以信手拈来(不要太纠集语言),当然此处我选择了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 163,963
精华内容 65,585
关键字:

引用类型保存在堆吗