使用append来克隆切片常常比使用copy高效得多

以下文章来源于Go 101 ,作者老貘

直接上基准测试:


package main 

import "testing" 

type Element = int64 
const N = 1024 * 1024 

var y0 []Element 
func Benchmark_PureMake(b *testing.B) { 
  for i := 0; i 

基准测试结果(标准编译器1.12):

Benchmark_PureMake-4     1328951 ns/op 
Benchmark_PureCopy-4     1271411 ns/op 
Benchmark_MakeAndCopy-4  2799283 ns/op 
Benchmark_Append-4       1637352 ns/op 

从这个结果可以看出,使用append来克隆切片比使用make+copy要高效得多。使用make+copy相对低效的原因是make需要将其开辟出的每个元素置零,这对于这个应用场景其实是没有必要的。

注意:

  • 今后的标准编译器版本可能会对使用make+copy方法进行优化,从而将完全消除这两种方法的性能差异。
  • 当切片的元素中包含指针时,这两种方法的性能差异并不大。
  • 此第二种方法(使用append)参考了如何完美地克隆一个切片这篇文章。
3