C#内存分配
1、进程堆、线程栈
一个进程一个堆,一个线程一个栈
2、引用类型对象在堆里,值类型对象在栈中(其实值类型也可能在堆中,如下2.2所述)。变量在栈中。
2.1引用类型对象里的值类型,是在堆中的。
2.2值类型对象里的引用类型对象,在堆中。
2.3任何引用类型对象都在堆中。
MemberwiseClone()——浅拷贝:只拷贝引用
深拷贝:不仅拷贝引用,还拷贝引用类型的值。三种方式:1、直接new 2、所有子类型都用原型模式 3、序列化之后进行反序列化得到全新对象
string类型的“=”操作符是做了重载的,等同于new了一个新的string对象,开辟了新的空间。实际上string类型的值是不可以修改的,享元模式也由此而来。
为什么string类型不能修改?