小编典典

切片如何通过追加放大?容量是否总是增加一倍?

go

append切片时,如果需要可以将切片放大。由于规范未指定算法,因此对此感到很好奇。

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

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


阅读 282

收藏
2020-07-02

共1个答案

小编典典

append可以在其中找到负责切片的代码。

截至2014-2020年,已实施的规则为:

  1. 如果追加到切片将使其长度增加两倍以上,则将新容量设置为新长度。
  2. 否则,如果当前长度小于1024,则将容量加倍;如果更大,则将容量增加25%。重复此步骤,直到新容量适合所需的长度。

大概这不是规范的一部分,因此将来可以根据需要更改启发式方法。您可以在master分支上检查此实现的最新版本。

2020-07-02