当前位置:首页 > 内存 > 正文

引用类型在内存分配上的区别

  • 内存
  • 2024-06-14 15:51:48
  • 381

一、值类型、引用类型区别,有何影响?

值类型和引用类型的区别:

值类型的内容存储在堆栈中。引用类型的指针存储在栈上,内容存储在堆上。

值类型和引用类型最大的区别在于:传输效率及其效果:效率是指:程序运行时,会大量运行复杂的函数,并进行内存的复制和分配在毫秒级别,Value复制和指针复制有很大区别,Impact表示修改方法内的数据是否会影响方法外的数据对象。

当值类型=其他变量时,复制内容(替换堆栈内容),当引用类型=其他变量时,替换指针(替换堆栈指针)。

当设置了值类型(example=1)时,是替换内容(栈内容替换),当引用类型=new时,是新分配的内存(新分配的堆内存)和替换指针(堆栈指针替换)。

值类型在方法移动操作期间复制内容的副本(新赋值堆栈的内容),引用类型在方法执行过程中复制指针(指向新赋值堆栈的指针)move操作,指向相同的内容,内容不被复制。

修改方法的宽字符串中的值的类型,不会影响方法外部的变量。方法内修改引用类型是因为引用了相同的内容,方法外的值也会同步改变。

String是私有引用类型:

String是私有引用类型每次=newString时,栈指针实际上都改变了(新分配的堆内存,替换栈指针)。不改变值。

传递给该方法的字符串是一个指针(新分配的堆栈指针)。方法内=新字符串替换了方法内的指针(替换了新的堆栈指​​针),并且不影响方法外的指针(不影响原来的堆栈指针),因此性能看起来与值传输一致。

结构体的值类型和类引用类型的区别:

结构体是值类型,但是结构体中的字符串、数组和类都存储在It中是一个指针,与值一起存储在堆栈中。

所谓值类型,是指传递给方法时,复制一组指针和一组值,并修改方法内部结构体的一级属性(struct字符串修改,新数组,新类)改变的是方法内指向结构体的指针(1级指针)。结构体指针不能在方法外更改,因此不会影响其外部的结构体,但是修改数组中的数据和类属性会影响方法外的结构体(因为更改的是级别1的内容。指针指向)。

类是引用类型,并且将指针传递给方法。替换方法内部的属性会影响方法外部的对象(因为指针指向的内容被修改了)。但是方法内部的new=对象会替换指向方法内部对象的指针,并且不会影响方法外部的对象。替换回属性不会影响方法外部的对象。


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

1.分布不同。

值类型分配在线程堆栈上(由操作系统管理),引用类型分配在托管堆上(由GC管理)。

管理涉及分配和释放内存空间:

变量本身存储在堆栈上(无论是值类型变量还是引用类型变量)。);

但是对于真实的数据:引用类型存在于托管堆上,值类型存在于堆栈上。

2.继承则不同。

值类型继承自valueType,引用类型valueType直接继承自。

3.释放方式不同。

当值类型超出范围时,操作系统将释放该值类型以减少托管堆的负载;引用类型取决于GC;因此,值类型具有性能优势。

4.属性不同。

值类型是隔离的,不能用作基类。引用类型通常具有继承性。

5.

值类型不能为null,默认初始化为该类型的默认值;引用类型默认初始化为NULL。

6.参数传递的差异。

当值类型作为参数传递时,它对其自身没有影响。当引用类型作为参数传递时,变量的最终值将会改变。


三、值类型与引用类型的区别是什么呢?1)值类型存储在内存栈中,引用类型数据存储在内存堆中,内存单元存储堆中存储的地址。
2)访问值类型快,而访问引用类型慢。
3)值类型代表实际数据,引用类型代表对内存堆中存储的数据的指针和引用。
4)栈内存自动释放,堆内存在.NET中由GC自动释放。
5)值类型继承自ype,引用类型继承自。