golang --- 切片(slice)扩容规则

317 阅读1分钟

go1.17之前

1.当期望容量 > 两倍的旧容量时,直接使用期望容量作为新切片的容量

2.如果旧容量 < 1024(注意这里单位是元素个数),那么直接翻倍旧容量

3.如果旧容量 > 1024,那么会进入一个循环,每次增加25%直到大于期望容量

go1.18 之后

  1. 当期望容量 > 两倍的旧容量时,直接使用期望容量作为新切片的容量

2.如果旧容量 < 256(注意这里单位是元素个数),那么直接翻倍旧容量

  1. 如果容量大于 256, 扩容((旧容量 + 3 * 256) / 4)

file

差别

大于预定阈值时, 不在是粗暴的降为为 1.25 倍扩容, 而是通过增加一个常量(threshold=256)来使得扩容更加平滑切片(slice)扩容规则

本文由博客一文多发平台 OpenWrite 发布!