当达到先前的容量限制时,为什么切片的容量增加一倍?

时间:2018-09-07 09:52:11

标签: go

我不明白为什么Go会在切片达到先前容量时将其容量增加一倍。为什么会发生这种情况,这是一件好事吗?

例如在此切片中添加769个项目,容量将增加到1536:

package main

import "fmt"

func main() {
    s := make([]int, 0, 3)
    for i := 0; i < 1024; i++ {
        s = append(s, i)
        fmt.Printf("cap %v, len %v, %p\n", cap(s), len(s), s)
    }
}

输出

cap 3, len 3, 0xc000088000
cap 6, len 4, 0xc00006c060
cap 6, len 5, 0xc00006c060
cap 6, len 6, 0xc00006c060
cap 12, len 7, 0xc000062060
cap 12, len 8, 0xc000062060
cap 12, len 9, 0xc000062060
cap 12, len 10, 0xc000062060
cap 12, len 11, 0xc000062060
cap 12, len 12, 0xc000062060
cap 24, len 13, 0xc00008e000
cap 24, len 14, 0xc00008e000
cap 24, len 15, 0xc00008e000
cap 24, len 16, 0xc00008e000
cap 24, len 17, 0xc00008e000
cap 24, len 18, 0xc00008e000
cap 24, len 19, 0xc00008e000
cap 24, len 20, 0xc00008e000
cap 24, len 21, 0xc00008e000
cap 24, len 22, 0xc00008e000
cap 24, len 23, 0xc00008e000
cap 24, len 24, 0xc00008e000
cap 48, len 25, 0xc000090000
cap 48, len 26, 0xc000090000
cap 48, len 27, 0xc000090000
cap 48, len 28, 0xc000090000
cap 48, len 29, 0xc000090000
cap 48, len 30, 0xc000090000
......

0 个答案:

没有答案