美文网首页
13、堆和栈,值类型和引用类型

13、堆和栈,值类型和引用类型

作者: Peuimporte | 来源:发表于2021-10-26 01:31 被阅读0次

1. 简介:

我们把程序运行时的内存分为堆空间和栈空间

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

2. 栈:

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

image

3. 堆

堆是一块内存区域,与栈不同,堆里的内存能够以任意顺序存入和移除

4. GC Garbage Collector垃圾回收器

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

image

值类型和引用类型

类型被分为两种:值类型(整数,bool struct char 小数)和引用类型(string 数组 自定义的类,内置的类)。 值类型只需要一段单独的内存,用于存储实际的数据,(单独定义的时候放在栈中) 引用类型需要两段内存 第一段存储实际的数据,它总是位于堆中 第二段是一个引用,指向数据在堆中的存放位置

当我们使用引用类型赋值的时候,其实是赋值的引用类型的引用。 如果数组是一个值类型的数组,那么数组中直接存储值,如果是一个引用类型的数组(数组中存储的是引用类型),那么数组中存储的是引用(内存地址)。

image.png

分析下面的变量在内存中的表示方式

 static void Test1()
 {
 int i = 34;
 int j = 34;
 int temp = 334;
 char c = 'a';
 bool b = true;
 }

 static void Test2()
 {
 int i = 34;
 int j = 234;
 string name = "zhangsan";

 }

 static void Test3()
 {
 string name = "zhangsan";
 string name2 = "lisi";
 name = name2;
 name = "wangwu";
 Console.WriteLine(name+":"+name2);
 }

相关文章

  • 13、堆和栈,值类型和引用类型

    1. 简介: 我们把程序运行时的内存分为堆空间和栈空间 栈空间比较小,但是读取速度快堆空间比较大,但是读取速度慢 ...

  • Swift中堆(heap)和栈(stack)的区别

    1、内存空间分为堆空间和栈空间 2、堆->引用类型(对象、函数、闭包) 栈->值类型(结构体、枚举、元组) 3、...

  • JavaScript高级程序设计读书笔记 第四章 变量,作用域和

    4.1基本类型和引用类型的值 值的两种数据类型 基本类型 保存在栈 引用类型 保存在堆 基本类型 5种 Undef...

  • 引用类型和值类型区别

    值类型:保存在线程栈上的,由系统自动释放资源 引用类型:保存在托管堆中的,引用类型包括类、接口、委托和装箱值类型r...

  • swift中值类型和引用类型

    操作值类型一般比引用类型速度快。原因:1、值类型比引用类型在线程上更安全(可能)。2、值类型在栈上,引用类型在堆中...

  • C#中数据到底存在堆上还是栈上

    C#的栈与堆 首先复习一下值类型与引用类型 1. 值类型与引用类型 值类型:基本数据类型([int,long,fl...

  • JS堆、栈、执行栈和EventLoop

    JS堆、栈、执行栈和EventLoop 堆、栈引用类型在栈中保存指针,在堆中保存对象值 执行栈 JS 代码在运行前...

  • iOS内存管理详解

    从上图可以看到,栈里面存放的是值类型,堆里面存放的是对象类型。对象的引用计数是在堆内存中操作的。下面我们讲讲堆和栈...

  • JavaScript - 深浅拷贝Object.assign()

    引入:值类型存储在栈内存中,引用类型存储在堆内存,深浅拷贝主要是针对引用类型来说的(数组、对象等)。(值类型直接赋...

  • 深拷贝和浅拷贝

    一,js中有堆和栈的概念 栈:基本数据类型的值存放在此处 堆:引用数据类型的地址在栈中,真实数据存放在堆中 二,赋...

网友评论

      本文标题:13、堆和栈,值类型和引用类型

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