当在切片上进行迭代增长时,很容易看出为什么首先分配大小(如果已知)比使用append函数更有效,因为后者将在每次迭代时决定是否增加切片容量。但是我很想知道,当以非迭代的方式连接两个大切片时,使用可变参数形式的append是否比使用make/copy构造效率更低。例如(假设sl 1和sl 2的类型为[]int)
sl = append(sl, sl2...)
与
nsl = make([]int, len(sl) + len(sl2))
i := copy(nsl, sl)
copy(nsl[i], sl2)
sl = nsl
我认为第一种形式(可读性更强)仍然是有效的,因为我预计仍然只有一个容量更改(基于append调用的参数数量)。我想的对吗?
1条答案
按热度按时间dgiusagp1#
append
和copy
使用相同的底层复制原语。append
不会分配内存,如果目标切片中有足够的容量。append
代码更容易阅读。