• 前端
  • JS
  • CSS
  • HTML
  • Mysql
  • Linux
  • SVN
  • 环境uedbet官网手机版最新
  • uedbet西甲体育投注详解
  • MAC_BOOK
  • 算法
  • 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