首页 > 后端开发 > Golang > Golang 中切片追加和直接赋值哪个更快?

Golang 中切片追加和直接赋值哪个更快?

Susan Sarandon
发布: 2024-11-15 02:34:02
原创
625 人浏览过

Which is Faster: Slice Append or Direct Assignment in Golang?

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) 涉及更复杂的过程:

  1. append() 函数创建一个新切片,其大小比当前切片 a 大一。
  2. 它将 a 的元素复制到新切片中。
  3. 它将值 i 分配给新切片的最后一个元素。
  4. 返回新切片并分配给变量 a。

这个额外的复制和分配会增加追加方法的性能开销,导致与直接方法相比执行时间更慢

结论

对于向切片追加元素,a[i] = i 是比 a =append(a, i) 更有效的选项,因为其操作更简单、更快。在优化切片操作任务的代码性能时请记住这一点。

以上是Golang 中切片追加和直接赋值哪个更快?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板