【Golang】Golang数组怎么动态扩容?(约199字)

原回答

其实提供了一个 slice 这样子的结构,也就是说它底层维护了一个指向数组的指针,然后还维护了一个数组的长度和一个它的空间预存的一个 CAP 的容量值。

如果将这个当前的数组 space 的大小它是小于 1024 的话,那基本上都是 2 倍的扩容,然后如果超过 1. 2 次的大小的话,基本上是 1. 25 倍的扩容。

补充

如果go 1.18+,原来的slice 容量oldcap小于256的时候,新 slice 的容量newcap是oldcap 的2倍;

当oldcap容量大于等于 256 的时候,newcap会有个计算公式:newcap += (newcap + 3*threshold) / 4 再对 newcap 作了一个内存对齐,这个和内存分配策略相关。

进行内存对齐之后,新 slice 的容量是要大于等于按照前半部分生成的newcap。

THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容