码迷,mamicode.com
首页 > 其他好文 > 详细

Golang中切片复制成本,一个大切片会比小切片占用更多内存吗?

时间:2020-04-15 01:01:11      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:make   数据拷贝   字段名   数组   相同   one   ola   数量级   strong   

原文链接:https://dave.cheney.net/2020/03/01/are-large-slices-more-expensive-than-smaller-ones

程序员有一个迷信的倾向,特别是当一个程序员听说拷贝操作是“昂贵”的(耗时耗内存),而拷贝操作随处可见,特别是当它学习Go的时候,每次赋值都是一次拷贝。

func f() {
       x, y := make([]byte, 9000), make([]byte, 9)
       a := x
       b := y
       // ...
 } 

考虑下这个例子,xy大了三个数量级,那么把x赋值给a的操作会比把y赋值给b的操作更“昂贵”吗?

答案是:不会。xy是相同类型的,[]byte,也就是说是byte类型的切片,当两个变量是同类型的时候,它们的赋值涉及到的数据拷贝是相等的,它们有着相同的成本。

所有切片的大小都是一样的,有三个字段名,一个是指向后台数组的指针,一个是长度len,一个是容量cap。所以复制切片其实就是复制这三个字段名,所以再大的切片的复制操作和小切片相比也是一样的。

Golang中切片复制成本,一个大切片会比小切片占用更多内存吗?

标签:make   数据拷贝   字段名   数组   相同   one   ola   数量级   strong   

原文地址:https://www.cnblogs.com/Jun10ng/p/12702419.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!