C#

面向对象(三)-内存分析:堆与栈

2017-11-18  本文已影响116人  元宇宙协会
1.内存

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

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

2.栈(stack)

内存中存储的是可变长度的数据区域,栈是自上向下进行填充,即由高内存地址指向低内存地址并且内存分配是连续的,C#中所有的值类型和引用类型的引用都分配在栈上,栈根据后进先出的原则,依次对分配和释放内存对象。

3.堆(heap)

内存中存储的是固定长度的数据区域。堆是从下往上分配,所以已用的空间在自由空间下面,C#中所有引用类型的对象分配在托管堆上,托管堆在内存上是连续分配的,并且内存对象的释放受垃圾收集机制的管理,效率相对于栈来说要低的多。

4.GC Garbage Collector垃圾回收器

CLR的GC就是内存管理机制,我们写程序不需要关心内存的使用,因为这些都是CLR帮我们做了。


GC
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字节的空间
} 
上一篇 下一篇

猜你喜欢

热点阅读