Go语言 如何通过追加来扩大切片?容量是否总是加倍?

fslejnso  于 2024-01-04  发布在  Go
关注(0)|答案(2)|浏览(111)

append一个切片时,如果需要的话,切片可能会被放大。因为规范没有指定算法,我很好奇。
我试图在Go源代码中找到append实现,但找不到。
有谁能解释一下具体的切片放大算法吗?容量总是翻倍吗?或者有谁能提供append的源代码位置吗?我可以自己查。

798qvoo8

798qvoo81#

负责在append中增长切片的代码可以在这里找到。(提交日期:2016年10月26日)
截至2014-2020年,实施的规则是:
1.如果附加到切片将使其长度增加一倍以上,则将新容量设置为新长度。
1.否则,如果当前长度小于1024,则将容量加倍,如果大于1024,则将容量加倍25%。重复此步骤,直到新容量适合所需长度。
假设这不是规范的一部分,所以如果需要的话,可以在将来更改语法。您可以在主分支上检查此实现的最新版本。

xzv2uavs

xzv2uavs2#

在Go 1.18中,它发生了变化。

提交消息备忘录:

starting cap    growth factor
    256             2.0
    512             1.63
    1024            1.44
    2048            1.35
    4096            1.30

字符串

相关问题