大切片一定比小切片代价大吗?

polaris · · 591 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

程序员倾向于迷信。特别是,当程序员听到拷贝很昂贵时,他们开始在各处看到它们,尤其是当他们得知在 Go 中每个赋值都是拷贝时。 考虑下面的代码;x 比 y 大三个数量级,将 x 分配给 a 比将 y 分配给 b 更昂贵吗? ```go func f() { x, y := make([]byte, 9000), make([]byte, 9) a := x b := y // ... } ``` 答案是:没有。x 和 y 具有相同的类型 []byte,即一个字节切片。由于两个变量具有相同的类型,因此它们的分配涉及复制相同数量的数据。两种分配的成本相同。 所有切片的大小相同;三个机器字(三个 uintptrs)。切片中的第一个字是指向切片底层数组的指针,这是切片的存储空间,第二个字是切片的长度,第三个字是容量。将一个 slice 变量分配给另一个变量只会复制三个机器字。 > 原文链接:<https://dave.cheney.net/2020/03/01/are-large-slices-more-expensive-than-smaller-ones> > > 作者:Dave Cheney > > 翻译:polaris

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

591 次点击  
加入收藏 微博
1 回复  |  直到 2020-03-05 08:38:25
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传