请选择 进入手机版 | 继续访问电脑版

golang切片扩容规则

[复制链接]
唐少琼 发表于 2021-1-1 17:48:56 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
golang扩容规则

  

  1. 举个例子来演示下package mainimport (        "fmt")func main() {        arr1 := [4]int{1,2,3,4}        //此时slice1为[1,2,3] 长度为3,容量为4        slice1 :=arr1[:3]        fmt.Println(slice1,len(slice1),cap(slice1))        slice1 = append(slice1,5000,6000)        fmt.Println(slice1,len(slice1),cap(slice1))}此时容量由原来的4扩容到了8,你以为就是简朴的2倍吗?那你可真明白错了,你得知道他背后扩容的原因,我来给你盘算下1⃣️原来的容量为4,追加了5000,6000后变为了6个,此时4*2>6,满足了脑图中的第二种情况,而且元素个数小于1024,先扩容2倍2⃣️由于64位操纵系统下,一个int范例占8个字节,所以8*8=643⃣️此时匹配操纵系统预先分配好的内存规格,规则正好匹配了64,所以用64/8=8,所以扩容后的容量为8
复制代码

[code]咱们再来一个例子看你是否真正明白了他的扩容规则, 这个例子最后容量为10package mainimport (        "fmt")func main() {        arr1 := [4]int{1,2,3,4}        //此时slice1为[1,2,3] 长度为3,容量为4        slice1 :=arr1[:3]        fmt.Println(slice1,len(slice1),cap(slice1))        slice1 = append(slice1,5000,6000,7000,8000,9000,10000)        fmt.Println(slice1,len(slice1),cap(slice1))}···慌不慌,你是不懂了吗?不懂我给你好好算一下1⃣️原来容量是4,此时追加了5个元素,变为了92⃣️4*2
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )