2 个回答
底层存储结构代码如下:
关键特性:自动扩容(cap不足时2倍增长),共享底层数组
type slice struct {
array unsafe.Pointer // 指向底层数组
len int
cap int
}
存储位置:slice头结构可能在栈或堆,底层数组始终在堆关键特性:自动扩容(cap不足时2倍增长),共享底层数组
发布于:2个月前 (02-24) IP属地:
切片是基于数组实现的,它的底层是数组,它自己本身非常小,可以理解为对底层数组的抽象。因为基于数组实现,所以它的底层的内存是连续分配的,效率非常高,还可以通过索引获得数据,可以迭代以及垃圾回收优化。
切片本身并不是动态数组或者数组指针。它内部实现的数据结构通过指针引用底层数组,设定相关属性将数据读写操作限定在指定的区域内。切片本身是一个只读对象,其工作机制类似数组指针的一种封装。
切片对象非常小,是因为它是只有3个字段的数据结构:
这3个字段,就是Go语言操作底层数组的元数据。
切片本身并不是动态数组或者数组指针。它内部实现的数据结构通过指针引用底层数组,设定相关属性将数据读写操作限定在指定的区域内。切片本身是一个只读对象,其工作机制类似数组指针的一种封装。
切片对象非常小,是因为它是只有3个字段的数据结构:
指向底层数组的指针
切片的长度
切片的容量
这3个字段,就是Go语言操作底层数组的元数据。
发布于:5个月前 (11-29) IP属地:四川省
我来回答
您需要 登录 后回答此问题!