Golang - 值类型和引用类型
1、概述
1)值类型:int系列,float系列,bool,string,array数组和struct结构体
2)引用类型:指针,slice切片,map,chan管道,interface接口等
2、使用特点
1)、值类型:变量直接存储值,内存通常在栈中分配。
2)、引用类型:变量存储的是一个地址,这个地址对应的空间才是真正的存储数据(值),内存通常在堆上分配,当没有任何变量引用这个地址时,改地址对应的数据空间就成为了一个垃圾,由GC来回收。

3、栈区和堆区的区别:

4、堆(heap)的解释:
堆也是一种数据结构。堆在内存分配中类似往一个房间里摆放各种家具,家具尺寸有大有小。分配内存时,需要找一块足够装下家具的空间再摆放家具。经过反复摆放和腾空家具后,房间里的空间会变得乱七八糟,此时再往空间里摆放家具会存在虽然有足够的空间,但各空间分布在不同的区域,无法有一段连续的空间来摆放家具的问题。此时,内存分配器就需要对这些空间进行调整优化。
堆分配内存和栈相比,堆适合不可预知大小的内存分配。但是为此付出的代价是分配速度较慢,而且会形成内存碎片。
浙公网安备 33010602011771号