Golang中切片复制成本,一个大切片会比小切片占用更多内存吗?
原文链接: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 // ... }
考虑下这个例子,x
比y
大了三个数量级,那么把x
赋值给a
的操作会比把y
赋值给b
的操作更“昂贵”吗?
答案是:不会。x
和y
是相同类型的,[]byte
,也就是说是byte类型的切片,当两个变量是同类型的时候,它们的赋值涉及到的数据拷贝是相等的,它们有着相同的成本。
所有切片的大小都是一样的,有三个字段名,一个是指向后台数组的指针,一个是长度len
,一个是容量cap
。所以复制切片其实就是复制这三个字段名,所以再大的切片的复制操作和小切片相比也是一样的。
相关推荐
牧 2020-10-22
xixixi 2020-10-09
haokele 2020-07-08
kehanxin 2020-07-05
zhiyuan0 2020-07-04
点滴技术生活 2020-06-28
tangjikede 2020-06-21
goodriver 2020-06-17
Yellowpython 2020-06-16
fendou00sd 2020-06-16
cleanerxiaoqiang 2020-06-16
Jonderwu 2020-06-14
风吹夏天 2020-06-08
ThinkingLink 2020-06-06
applecarelte 2020-06-04
sillion 2020-06-04
CloudXli 2020-06-01
明天你好 2020-05-20