小编Bak*_*yar的帖子

Go切片容量提升率

我是 Go 新手,正在阅读 O'reilly 出版的一本名为“学习 Go”的书。在阅读有关切片的内容时,有以下声明:

为了增加切片的大小,从 Go 1.14 开始,规则是将容量加倍,直到达到 1024 的大小,然后再增长 25%。”

我写了这段 Go 代码来证明这一点。

package main

import "fmt"

func main() {
    var length uint16 = 1024

    var x []int

    for i := 0; i < int(length); i++ {
        x = append(x, i)
        fmt.Printf("\nLength is %d. Capacity is %d", len(x), cap(x))
    }
}

Run Code Online (Sandbox Code Playgroud)

从 0 到 len(x)==512 事实证明,Go 运行时使容量(也称为大小)翻倍。但对我来说有趣的部分开始了:当 len(x) >= 512 时,我预计容量为 1024,因为 512*2 = 1024。然而结果如下:

Length is 513. Capacity is 848
Run Code Online (Sandbox Code Playgroud)

所以大约增加了 65%。谁可以给我解释一下这个?

go slice

7
推荐指数
1
解决办法
992
查看次数

标签 统计

go ×1

slice ×1