当append一个切片时,如果需要的话,切片可能会被放大。因为规范没有指定算法,我很好奇。我试图在Go源代码中找到append实现,但找不到。有谁能解释一下具体的切片放大算法吗?容量总是翻倍吗?或者有谁能提供append的源代码位置吗?我可以自己查。
append
798qvoo81#
负责在append中增长切片的代码可以在这里找到。(提交日期:2016年10月26日)截至2014-2020年,实施的规则是:1.如果附加到切片将使其长度增加一倍以上,则将新容量设置为新长度。1.否则,如果当前长度小于1024,则将容量加倍,如果大于1024,则将容量加倍25%。重复此步骤,直到新容量适合所需长度。假设这不是规范的一部分,所以如果需要的话,可以在将来更改语法。您可以在主分支上检查此实现的最新版本。
xzv2uavs2#
在Go 1.18中,它发生了变化。
提交消息备忘录:
starting cap growth factor 256 2.0 512 1.63 1024 1.44 2048 1.35 4096 1.30
字符串
2条答案
按热度按时间798qvoo81#
负责在
append
中增长切片的代码可以在这里找到。(提交日期:2016年10月26日)截至2014-2020年,实施的规则是:
1.如果附加到切片将使其长度增加一倍以上,则将新容量设置为新长度。
1.否则,如果当前长度小于1024,则将容量加倍,如果大于1024,则将容量加倍25%。重复此步骤,直到新容量适合所需长度。
假设这不是规范的一部分,所以如果需要的话,可以在将来更改语法。您可以在主分支上检查此实现的最新版本。
xzv2uavs2#
在Go 1.18中,它发生了变化。
提交消息备忘录:
字符串