C#变量储存-堆(Heap)和栈(Stack)

堆(Heap):在c里面叫堆,在c#里面其实叫托管堆。

栈(Stack):就是堆栈,简称栈。

变量储存到两个地方:栈(堆栈)、堆(托管堆,安全,受CLR管理)

值类型数据存储到栈上,引用类型的数据存储到堆上。

栈和堆是内存上面的两个区域。

栈上存储的数据量小。堆上存在的数据量大。

值类型会把数据的值直接存在栈上,在存储和读取数据方便比堆相对快。

引用类型会把数据的值存在到堆上,而在栈上存储的仅仅是个地址(也称引用或指针)。

栈上的地址和堆上的值有联系,通过栈上的地址可以去堆上找到某个值。

栈上的空间有顺序的,是连续的,先进后出。而堆上的空间是无序,散列的。

//值类型
int a = 10;
short b = 20;
long c = 30;
bool d = false;

string虽然是引用类型,在栈上分配一个地址,在堆上分配一个值。

默认同一个值在堆上只占一个空间,理论上修改str1会影响str2,但实际上不是这样的。

string比较特殊,str1和str2会使用常量池

为什么修改了str1不会影响str2?

在修改str1之前,str1和str2同时指向堆上的“hello”空间,修改了str1后,给str1在堆重新分配了新的空间“HELLO”,而原来的空间给str2自己单独使用了

string str1 = "hello";
string str2 = "hello";
Console.WriteLine("str1的值:" + str1 + ",str2的值:" + str2);
str1 = "HELLO";
Console.WriteLine("str1的值:" + str1 + ",str2的值:" + str2);

/*null:无效的;零值的;等于零的;空位;无信号;数字零;空白符号;*/
str1 = null;
str2 = null;
str2 = ""; // 空字符串


在C#中,栈和堆是两种内存管理方式。
栈主要用于存储方法中的变量(值类型),系统自动分配和释放;

堆主要用于动态分配内存(引用类型),大小不固定,由GC(垃圾回收器)回收。

特点:

栈的特点:数据使用之后自动销毁;存放局部变量、对象的引用地址等;数据访问速度比堆快。
堆的特点:动态分配内存;大小不固定;可以由GC自动回收。

这五个区是:栈区、堆区、常量区、静态区、代码区 

  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值