C#学习笔记【七】——堆和栈

7.1堆和栈简介

    我们把内存分为堆 空间和栈空间。

    栈空间比较小,但是读取速度快;堆空间比较大,但是读取速度慢

    栈的特征,数据只能从栈的顶端插入和删除;堆是一块内存区域,与栈不同,堆里的内存能够以任意顺序存入和移除。

    CLR的GC(Garbage Collector垃圾回收器)就是内存管理机制。

7.2值类型和引用类型

    类型被分为两种:值类型(整数,bool struct char 小数)和引用类型(string 数组 自定义的类,内置的类)。

    值类型只需要一段单独的内存,用于存储实际的数据,(单独定义的时候放在栈中)。

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

    当我们使用引用类型赋值的时候,其实是赋值的引用类型的引用(在栈内操作,赋值栈内存放的内存地址),并释放没有引用指向的堆空间。

Vector3 v1 = new Vector3();//定义的类

v1.x = 100;

v1.y = 100;

v1.z = 100;

Vector3 v2 = new Vector3();

v2.x = 200;

v2.y = 200;

v2.z = 200;

v2 = v1;

v2.x = 300;

Console.WriteLine(v1.x);//结果是300,因为v2=v1赋值时,v1和v2的引用都指向同一个堆空间(原来v1指向的   

                        //堆)

    如果数组是一个值类型的数组,那么数组中直接存储值;如果是一个引用类型的数组(数组中存储的是引用类型),那么数组中存储的是引用(内存地址)。
 

Vector3[] vArray = new Vector3[] { new Vector3(), new Vector3(), new Vector3() };

Vector3 v1 = vArray[0];

vArray[0].x = 100;

v1.x = 200;

Console.WriteLine(vArray[0].x);//修改v1.x vArray[].x结果也为200

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值