菜的像徐坤
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

堆和栈,值类型和引用类型

4436人阅读 2021/5/23 13:33 总访问:880047 评论:0 收藏:3 手机
分类: Csharp

前言

线程堆栈:简称栈 Stack


托管堆: 简称堆 Heap

C#的引用类型包括:数组、委托、接口、object、字符串、用户定义的类。(string)
为什么string是引用类型
     从string类型的值来分析
     1)string str = null;  这个就可以成功
     2)int a = null;  这样就会报错:“无法将null转换为int”
           字符串也是object
     
C#的值类型包括:数值类型、结构体、bool型、枚举、可空类型、用户定义的结构体。

堆 

什么是堆?
堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小


堆是无序的,他是一片不连续的内存域,有用户自己来控制和释放,如果用户自己不释放的话,

当内存达到一定的特定值时,通过垃圾回收器(GC)来回收


堆上存放的则多是对象,数据等。


堆像是一个仓库,储存着我们使用的各种对象等信息,跟栈不同的是他们被调用完毕不会立即被清理掉

什么是栈?

栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义


存放在栈中时要管存储顺序,保持着先进后出的原则,他是一片连续的内存域,有系统自动分配和维护


栈通常保存着我们代码执行的步骤


栈内存无需我们管理,也不受GC管理。当栈顶元素使用完毕,立马释放

值类型

什么是值类型

值类型存储在声明的地方。 值类型如果定义在方法中就存储在栈上面,如果是定义在类当中就是存储在堆上面

直接将内存储存在栈内,由系统自动释放资源的数据类型

引用类型和值类型都继承System.Object类。
几乎所有的引用类型都是从System.Object继承,而值类型则是继承System.Object的子类System。ValueType类

值类型分为4类8种

1、整形
int,long,byte,short
2、浮点型
float ,double
3、字符型
char
4、逻辑型
boolean

值类型数据赋值属于值传递,值传递是传递原参数是拷贝,实参传递给形参,形参发生改变而实参不变

 所有的值类型从Object中继承来的。任何类型都不能由值类型派生而来,因此,值类型是封闭式的。

引用类型

引用类型永远都是存储在堆上面的。

存储指针,具体的内容在堆上面

引用类型: 类类型、接口类型、数组类型和委托类型

 值类型赋值是重新创建一个副本
 而引用类型的赋值是共享同一块内存(副本),是指向同一块内存


评价