slice扩容
By skyshappiness Posted 2020-12-02 15:38:25 In

a:=make([]int, 2)

a=append(a, 3,4,5)

在1.18版本之前:

优先判断当前cap是否大于1024,不大于翻倍当前的cap,大于1024,则增加 old_cap+1024/4

1.18版本之后:

优先判断当前cap是否大于256,不大于翻倍cap,当达到512时变成 old_cap+(old_cap+3*256)/4

然后做了个内存对齐,因此一般会大于等于上面的计算公式


另外需要注意的是:

在没有扩容slice之前,进行append操作或者赋值操作,原始变量的对应也会改变,参考如下例子

package main

import (

        "fmt"

)

func main() {

        a := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

        b := a[2:5]

        c := a[2:6:7]

        fmt.Println(c)

        b = append(b, 100)

        c = append(c, 100)

        c = append(c, 200)

        b[1] = 100

        fmt.Println(b)

        fmt.Println(c)

        fmt.Println(a)

}



友情链接
联系方式
  • 邮箱 / E-mail:121388038@qq.com