如何通过追加扩大切片?容量总是翻倍?

时间:2014-05-08 02:28:31

标签: go

append切片时,如果需要,可以放大切片。因为spec没有指定算法,所以我很好奇。

我尝试在Go源代码中找到append实现,但无法找到它。

有人能解释一下扩大切片的指定算法吗?容量总是翻倍?或者任何人都可以提供append的源代码位置?我可以自己检查一下。

1 个答案:

答案 0 :(得分:9)

The code responsible for growing slices in append can be found here.

所以在当前的实现中,规则是:

  1. 如果附加到切片会使其长度增加两倍以上,则新容量将设置为新的长度。
  2. 否则,如果当前长度小于1024,则容量增加一倍;如果大于1024,则增加25%。重复此步骤,直到新容量符合所需长度。
  3. 据推测,这不是规范的一部分,因此如果需要,将来可以改变启发式方法。