开发者学堂课程【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 = 100
定义的变量 num 指向的内存空间 a 中存储该变量对应的值。
(2)引用类型
变量储存的是一个地址,这个地址对应的空间才真正储存数据(值),内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就称为一个垃圾,由 GC 来回收。
引用类型(如 ref)内存布局示意图:
ref
引用类型 ref 指向的内存空间 b 中存储其地址,内存空间 b 又指向内存空间 c,内存空间储存引用类型 ref 的值。
(3)计算机的栈区和堆区示意图
栈和堆的具体含义会在数组的知识中讲解,此处可以略作了解:从数据存储角度,内存空间分为两部分,一部分叫做栈区,一部分叫做堆区,也可能还有代码区等部分。
通常情况下,值类型数据储存在栈区,引用类型数据储存在堆区,但由于在Golang中存在编译逃逸分析,会根据时间使用情况,决定数据的存储位置可能会有部分值类型数据储存在堆区,但栈和堆两者是逻辑概念,因此不影响对程序的理解。
计算机的栈区和堆区示意图