美文网首页C#
面向对象(三)-内存分析:堆与栈

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

作者: 元宇宙协会 | 来源:发表于2017-11-18 20:01 被阅读116次
1.内存

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

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

2.栈(stack)

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

  • 栈的特征:
    数据只能从栈的顶端插入和删除
    把数据放入栈顶称为入栈(push)
    从栈顶删除数据称为出栈(pop)


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字节的空间
} 

相关文章

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

    1.内存 我们把内存分为堆空间和栈空间 栈空间比较小,但是读取速度快堆空间比较大,但是读取速度慢 2.栈(stac...

  • Java(L1)--面向对象

    Java知识点梳理 Chapter 3 面向对象的基本概念 堆内存与栈内存堆内存:存放对象的属性内容,需要new关...

  • Java对象内存分析

    此处对象内存分析只针对Java基本对象,暂不对集合对象进行剖析。 内存 栈内存 堆内存

  • Java面向对象-堆、栈对象内存解析。

    学生类: 学生测试类: 在JVM内存里面主要分布有以下三个区域: 栈:存放基础数据和自定义对象的引用 堆:主要存储...

  • Java学习笔记二:内存分析、this、static和参数传值机

    一、面向对象的内存分析 1.内存分配 栈的特点如下: 栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧...

  • 堆和栈的区别

    栈内存用于存储基本类型变量和对象的引用;堆内存用来存储java中的对象。栈和堆.png 栈内存属于单个线程,每个线...

  • 堆和栈

    一 java 堆内存和栈内存 java把内存分为两种:一种是堆内存,一种是栈内存 堆: 堆内存主要存储实例化对象,...

  • 堆栈内存和js代码执行

    1.堆栈内存是什么? 1)内存大概分4块, 栈内存存放基本变量和对象的引用, 堆内存存放对象,栈内存中的引用指向堆...

  • iOS 堆和栈的区别

    OC对象存放于堆里面(堆内存要程序员手动回收) 非OC对象一般放在栈里面(栈内存会被系统自动回收) 堆里面的内存是...

  • golang 逃逸分析_v1.0.0

    逃逸分析是golang编译器分析一个对象到底应该放到堆内存上,还是栈内存上逃逸是指在某个方法之内创建的对象,除了在...

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/ghlyvxtx.html