Go语言 在切片上使用copy而不是append总是更快吗?

xhv8bpkk  于 2023-09-28  发布在  Go
关注(0)|答案(1)|浏览(110)

当在切片上进行迭代增长时,很容易看出为什么首先分配大小(如果已知)比使用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调用的参数数量)。我想的对吗?

dgiusagp

dgiusagp1#

appendcopy使用相同的底层复制原语。
append不会分配内存,如果目标切片中有足够的容量。
append代码更容易阅读。

相关问题