欢迎光临散文网 会员登陆 & 注册

C#中的堆栈,值类型与引用类型

2022-12-29 20:41 作者:龘龖龍__  | 我要投稿

内存分配

内存用来存储正在执行的程序,分为两个区域

区:占地小,方便找,读取速度较快


区:占地大,读取速度较慢(比硬盘快)


 

值类型与引用类型

 

因为方法执行于栈中,所以方法声明的变量都在栈中(仅仅存在于局部变量中,与成员变量的声明和存储不同),但由于值类型直接存数据,引用类型直接存引用(不管是局部变量还是成员变量都通用),所以两者应用方法会有差别

有以下是方法内值类型与引用类型存储方式不同的影响:

 


程序执行上图代码时的结果如下

 

修改一下再问



修改了堆


程序执行上图代码时的结果如下

 

修改了栈


 

<修改了栈>这张截图中最后一行代码后,因为修改后i01创建了一个新的”引用”(引用02),在堆中开辟了与i02没有关系的新地方,所以i02的”引用”(引用01)和堆中的值将不会改变

 

按照上面的说法,同为引用类型的s01给s02赋值”a”后再把堆中的数据改成”b”,s02应该也随着堆中的修改变成”b”

 

可运行后发现上图的结果却没有任何改变,就像图1-7只改变了s01,因为s01=”b”实际上修改的是栈,创建了一个新引用,和new数组是一个原理

 

判断代码是修改堆还是修改栈的小技巧:看修改的变量右边有没有加中括号,加了就是修改堆,没加就是修改栈


C#中的堆栈,值类型与引用类型的评论 (共 条)

分享到微博请遵守国家法律