Golang切片附加vs分配性能
为了使切片附加操作更快,我们需要分配足够的容量.有两种方法可以追加切片,这是代码:
func BenchmarkSliceAppend(b *testing.B) { a := make([]int,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)快,我想知道为什么?
a [i] =我只是将值i赋给a [i].这不是追加,它只是一个简单的
assignment.
现在附加: a = append(a,i) 理论上会发生以下情况: >这称为内置 与简单的任务相比,这里发生了很多事情.即使许多这些步骤被优化和/或内联,作为将i分配给切片的元素的最小附加,切片类型的局部变量a(切片头)必须在每个周期中更新.环. 推荐阅读:The Go Blog: Arrays,slices (and strings): The mechanics of ‘append’ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |