Golang Slice的底层实现是什么?

提问者:帅平 问题分类:面试刷题
Golang Slice的底层实现是什么?
2 个回答
空欢喜一场
空欢喜一场
底层存储结构代码如下:
type slice struct {
    array unsafe.Pointer // 指向底层数组
    len   int
    cap   int
}
存储位置:slice头结构可能在栈或堆,底层数组始终在堆
关键特性:自动扩容(cap不足时2倍增长),共享底层数组
发布于:2个月前 (02-24) IP属地:
永不落的梦想
永不落的梦想
切片是基于数组实现的,它的底层是数组,它自己本身非常小,可以理解为对底层数组的抽象。因为基于数组实现,所以它的底层的内存是连续分配的,效率非常高,还可以通过索引获得数据,可以迭代以及垃圾回收优化。
切片本身并不是动态数组或者数组指针。它内部实现的数据结构通过指针引用底层数组,设定相关属性将数据读写操作限定在指定的区域内。切片本身是一个只读对象,其工作机制类似数组指针的一种封装。
切片对象非常小,是因为它是只有3个字段的数据结构:
指向底层数组的指针
切片的长度
切片的容量

这3个字段,就是Go语言操作底层数组的元数据。
发布于:5个月前 (11-29) IP属地:四川省
我来回答