原回答
其实提供了一个 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
暂无评论内容