内存分配模式
主要分为两种,栈和堆。
黄金定律:引用类型一定分配在堆上,值类型的局部变量存储在栈上,而类的值类型成员存储在堆上。
思考一
int a=10;
int b=a;
b=20;
a=?;
很显然,执行完这段代码后a的值并没有被改变,a的值还是10.
思考二
class Person
{
public string Name {get;set;}
public int Age{get;set;}
}
Person p=new Person();
p.Name="张三";
p.Age=20;
Person p1=p;
p1.Name="李四";
p1.Age=21;
Console.WriteLine(p.Name);
Console.WriteLine(p.Age);
Console.ReadLine();
这回的输出结果变为了李四与21。
由于Person p1在栈内直接获取了Person p的堆地址,而不是数据,所以在修改Person p1内的数据时,便会根据地址修改堆内的相应数据,从而修改了Person p的数据,所以输出结果会变为变为李四与21。
未将对象引用到实例![示例图](https://i-blog.csdnimg.cn/blog_migrate/bf53321e3c987d469dd176af04d1d08c.png)
当栈内A地址为NULL时,便会引发未将对象引用到实例的错误。
垃圾回收
值类型(int,double,bool等)占用的空间在方法执行结束会被马上释放,引用类型(string,数组,class等)占用的空间在方法执行结束后不会被马上释放,具体什么时间释放由垃圾回收器(GC)来决定。
欢迎访问我的个人博客: www.linjiaxiaozhang.com