首页 > 数据库 > Go:大切片一定比小切片代价大吗?
2020
03-07

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 变量分配给另一个变量只会复制三个机器字。

扫码芷若 获取免费视频学习资料

编程学习

查 看2019高级编程视频教程免费获取