侧边栏壁纸
博主头像
Tony's Blog博主等级

行动起来,coding

  • 累计撰写 83 篇文章
  • 累计创建 58 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录
go

go 切片追加时,避免Copy操作

Tony
2024-02-21 / 0 评论 / 0 点赞 / 14 阅读 / 2476 字

本文链接: https://blog.csdn.net/lishuangquan1987/article/details/124439749

参考文章:

https://www.jianshu.com/p/cf243f1061dc

先上代码:

a := []int{1, 2, 3}
fmt.Println(&a[0])
b := append(a, 4)
fmt.Println(&b[0])

这两个输出值是一样的吗?答案 不一样

1-sohm.png

发现就追加了一个元素,地址就变了,莫非每次追加,所有的元素都Copy一次?那性能也太低了吧

经过查询,做了如下尝试,发现不是这样的, 是我没有给初始容量

a := make([]int, 0, 1024)
a = append(a, []int{1, 2, 3}...)
fmt.Println(&a[0])
b := append(a, 4)
fmt.Println(&b[0])

2-imru.png

所以以后设置切片时,必要的时候要给初始容量。

0

评论区