值类型和引用类型|学习笔记

简介: 快速学习值类型和引用类型。

开发者学堂课程【GO 语言核心编程-基础语法、数组、切片、Map:值类型和引用类型】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/625/detail/9534


值类型和引用类型

 

内容介绍:

一、常见的值类型和引用类型

二、值类型和引用类型的使用特点

 

一、常见的值类型和引用类型

(1)值类型

基本数据类型 int 系列,float 系列,bool,string,数组和结构体 struct

(2)引用类型

指针、slice 切片、map、管道 chan、接口 interface 等

 

二、值类型和引用类型的使用特点

(1)值类型

变量直接储存值,内存通常在栈中分配。

值类型内存布局示意图:

var num = 100image.pngimage.png

定义的变量 num 指向的内存空间 a 中存储该变量对应的值。

(2)引用类型

变量储存的是一个地址,这个地址对应的空间才真正储存数据(值),内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就称为一个垃圾,由 GC 来回收。

引用类型(如 ref)内存布局示意图:

refimage.pngimage.png

引用类型 ref 指向的内存空间 b 中存储其地址,内存空间 b 又指向内存空间 c,内存空间储存引用类型 ref 的值。

(3)计算机的栈区和堆区示意图

栈和堆的具体含义会在数组的知识中讲解,此处可以略作了解:从数据存储角度,内存空间分为两部分,一部分叫做栈区,一部分叫做堆区,也可能还有代码区等部分。

通常情况下,值类型数据储存在栈区,引用类型数据储存在堆区,但由于在Golang中存在编译逃逸分析,会根据时间使用情况,决定数据的存储位置可能会有部分值类型数据储存在堆区,但栈和堆两者是逻辑概念,因此不影响对程序的理解。

计算机的栈区和堆区示意图image.png

相关文章
|
9月前
|
存储 C# C++
|
Java 编译器 Scala
值类型的强制转换|学习笔记
快速学习值类型的强制转换。
65 0
值类型的强制转换|学习笔记
再聊一次值类型和引用类型
这是一个托管的值类型,表示array的一个片断, 在用做websocket接收数据的载体时我发现每次值传递后, 这个ArraySegment<byte>貌似发生了变化。这勾起了我的探究欲。
再聊一次值类型和引用类型
|
存储 开发框架 .NET
C#系列之值类型和引用类型
C#系列之值类型和引用类型
132 0
C#系列之值类型和引用类型
|
存储 Java 程序员
C#基础——值类型和引用类型
C#基础——值类型和引用类型
550 0
C#基础——值类型和引用类型
|
存储 数据格式 JSON
第183天:引用类型和值类型
一、内存分配 1、数值型内存分配 1 2 var num1; //这个时候不进行内存分配 3 var num3=9;//分配内存 4 var num4=num3;//会不会分配 5 6 // 这里到底分配还是不分配内存?? 7 // 答案 --分配内存 彼此拥有独立的内存空间,互不影响 8 console.
985 0
|
算法 C#
c#值类型与引用类型区别
值类型对象的两种表示方式:未装箱和已装箱,引用类型总是处于已装箱 值类型从System.ValueType派生。该类型提供了与System.Object相同方法,但System.ValueType重写了Equals方法, 能在两个对象的自断值完全匹配的前提下返回true。
933 0