Golang 中切片追加和分配的性能比较
在 Golang 中,向切片追加元素有两种常用方法:使用追加函数或直接为切片索引赋值。要了解这些方法之间的性能差异,请考虑以下代码:
func BenchmarkSliceAppend(b *testing.B) { a := make([]int, 0, b.N) for i := 0; i < b.N; i++ { a = append(a, i) } } func BenchmarkSliceSet(b *testing.B) { a := make([]int, b.N) for i := 0; i < b.N; i++ { a[i] = i } }
基准测试结果显示 a[i] = i 在执行时间方面显着优于 a =append(a, i):
BenchmarkSliceAppend-4 200000000 7.87 ns/op 8 B/op 0 allocs/op BenchmarkSliceSet-4 300000000 5.76 ns/op 8 B/op
性能差异的原因
性能差异源于每个方法执行的底层操作。 a[i] = i 只是将值 i 赋给切片的第 i 个元素,这是一个简单而高效的操作。
相比之下,a = append(a, i) 涉及更复杂的过程:
这个额外的复制和分配会增加追加方法的性能开销,导致与直接方法相比执行时间更慢
结论
对于向切片追加元素,a[i] = i 是比 a =append(a, i) 更有效的选项,因为其操作更简单、更快。在优化切片操作任务的代码性能时请记住这一点。
以上是Golang 中切片追加和直接赋值哪个更快?的详细内容。更多信息请关注PHP中文网其他相关文章!