app开发者平台在数字化时代的重要性与发展趋势解析
758
2022-08-30
Go:大切片一定比小切片代价大吗?(go切片容量)
程序员倾向于迷信。特别是,当程序员听到拷贝很昂贵时,他们开始在各处看到它们,尤其是当他们得知在 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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~