Go:大切片一定比小切片代价大吗?(go 切片定义)

网友投稿 255 2022-07-19

程序员倾向于迷信。特别是,当程序员听到拷贝很昂贵时,他们开始在各处看到它们,尤其是当他们得知在 Go 中每个赋值都是拷贝时。

考虑下面的代码;x 比 y 大三个数量级,将 x 分配给 a 比将 y 分配给 b 更昂贵吗?

func f() {

x, y := make([]byte, 9000), make([]byte, 9)

a := x

b := y

// ...

}

答案是:没有。x 和 y 具有相同的类型 []byte,即一个字节切片。由于两个变量具有相同的类型,因此它们的分配涉及复制相同数量的数据。两种分配的成本相同。

所有切片的大小相同;三个机器字(三个 uintptrs)。切片中的第一个字是指向切片底层数组的指针,这是切片的存储空间,第二个字是切片的长度,第三个字是容量。将一个 slice 变量分配给另一个变量只会复制三个机器字。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:图解Go里面的互斥锁mutex了解编程语言核心实现源码(go mutex 原理)
下一篇:TIOBE 发布 2020 年 3 月编程语言排行榜,Go 语言的表现令人惊叹!(tiobe是什么意思)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~