面向对象(三)-内存分析:堆与栈
2017-11-18 本文已影响116人
元宇宙协会
1.内存
我们把内存分为堆空间和栈空间
栈空间比较小,但是读取速度快
堆空间比较大,但是读取速度慢
2.栈(stack)
内存中存储的是可变长度的数据区域,栈是自上向下进行填充,即由高内存地址指向低内存地址并且内存分配是连续的,C#中所有的值类型和引用类型的引用都分配在栈上,栈根据后进先出的原则,依次对分配和释放内存对象。
-
栈的特征:
数据只能从栈的顶端插入和删除
把数据放入栈顶称为入栈(push)
从栈顶删除数据称为出栈(pop)
3.堆(heap)
内存中存储的是固定长度的数据区域。堆是从下往上分配,所以已用的空间在自由空间下面,C#中所有引用类型的对象分配在托管堆上,托管堆在内存上是连续分配的,并且内存对象的释放受垃圾收集机制的管理,效率相对于栈来说要低的多。
-
堆的特征:
堆是一块内存区域,与栈不同,堆里的内存能够以任意顺序存入和移除
4.GC Garbage Collector垃圾回收器
CLR的GC就是内存管理机制,我们写程序不需要关心内存的使用,因为这些都是CLR帮我们做了。

public class People
{
int age;
int height;
}
static void Main(string[] args)
{
People p ; // 在栈中存储一个变量p,存储地址
p = new People(); // new 关键字就是向系统要空间,根据后面的People来要要空间。存了两个int类型,所以是8个字节,但是C#针对类会分配8字节进行管理,所以总共开辟了16字节的空间
}