数据:copy 与避免长时间引用大数组

本文探讨了Go语言中copy函数的工作原理,包括允许的区域重叠和性能考量。强调了在处理大数组时,长时间引用可能导致内存浪费,并提出通过复制创建新切片来避免这种情况。建议在需要返回大数组片段时,使用copy创建独立的切片以释放原始资源。
摘要由CSDN通过智能技术生成

4-8 copy 与避免长时间引用大数组

08 copy

func main() {
    a := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    s1 := a[6:]
    s2 := a[4:7]
    fmt.Println(copy(s2, s1), a) // 3 [0 1 2 3 6 7 8 7 8 9]
}
  • 在两个slice间复制数据,复制长度以段slice为准。
  • 允许指向同一底层数组,允许目标区间重叠。

两个切片之间拷贝数据的时候。第一这两个切片可以指向同一个底层数组,第二切片复制区间可以重叠。复制的时候,s1容量是4,s2容量是3,复制长度以短的为准。s1数据拷贝到s2相当于把678覆盖456,底层数组变成0123678789。复制需要知道就是它允许指向同一个数组&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值