程序员倾向于迷信。特别是,当程序员听到拷贝很昂贵时,他们开始在各处看到它们,尤其是当他们得知在 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 变量分配给另一个变量只会复制三个机器字。
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/7103/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料
查 看2022高级编程视频教程免费获取