程序内存区域:堆 栈 静态存储区
商店和仓库
栈的特征:
数据只能从栈的顶端插⼊和删除
内存中的栈,是由系统管理(.Net框架)。
我们之后会在数据结构中学习写⼀个⾃⼰的栈结构,保存数据。
堆是⼀块内存区域,与栈不同,堆⾥的内存能够以任意顺序存⼊和移除
GC Garbage Collector垃圾回收器
CLR的GC就是内存管理机制,我们写程序不需要关⼼内存的使⽤,因为这些都是CLR帮我们做了。类似新生宿舍楼
这⾥的某些概念,只需要了解和知道的,不需要知道内在核⼼原理,我们知道汽⻋的引擎
是汽⻋的核⼼动⼒来源,我们不需要知道引擎是怎么造。
同样,上述是编译器开发者的事情。
类型被分为两种:
值类型只需要⼀段单独的内存
引⽤类型需要两段内存
注意
当我们使⽤引⽤类型赋值的时候,其实是赋值的引⽤类型的引⽤
如果数组是⼀个值类型的数组,那么数组中直接存储值,如果是⼀个引⽤类型的数组(数组中存储的是引⽤类型),那么数组中存储的是引⽤(内存地址)
c#//新建类 Customer.cs
class Customer
{
public string name;
public string address;
public int age;
public string createTime;
public Customer(string name, string address, int age, string createTime)
{
this.name = name;
this.address = address;
this.age = age;
this.createTime = createTime;
}
public void Show()
{
Console.WriteLine("名字:" + name);
Console.WriteLine("地址:" + address);
Console.WriteLine("年龄:" + age);
Console.WriteLine("创建时间:" + createTime);
}
}
c#//使用 Program.cs
int a = 123;
float b = 34.5f;
bool c = true;
string name = "zhangsan";
int[] array1 = new int[] { 23, 23, 11, 32, 4, 2435 };
string[] array2 = new string[] { "www", "baidu", "com" };
Customer c1 = new Customer("张三", "上海", 13, "2022");
//引用对象的改变
Customer c2 = c1;
c1.Show(); //输出中文张三
c2.Show(); //输出中文张三
c2.name = "zhangsan";
c2.Show(); //输出zhangsan
c1.Show(); //输出zhangsan
//将地址清空
c1 = null;//空 空引用 空对象
c2 = null;