coding
package go_basic
import "testing"
func MakeSliceWithoutAlloc() []int {
var newSlice []int
for i := 0; i < 100000; i++ {
newSlice = append(newSlice, i)
}
return newSlice
}
// MakeSliceWithPreAlloc 通过预分配Slice的存储空间构造
func MakeSliceWithPreAlloc() []int {
var newSlice []int
newSlice = make([]int, 0, 100000)
for i := 0; i < 100000; i++ {
newSlice = append(newSlice, i)
}
return newSlice
}
func BenchmarkMakeSliceWithoutAlloc(b *testing.B) {
for i := 0; i < b.N; i++ {
MakeSliceWithoutAlloc()
}
}
func BenchmarkMakeSliceWithPreAlloc(b *testing.B) {
for i := 0; i < b.N; i++ {
MakeSliceWithPreAlloc()
}
}
输出:
// 没有预分配内存空间的 BenchmarkMakeSliceWithoutAlloc
goos: windows
goarch: amd64
pkg: codes/go_basic
cpu: 12th Gen Intel(R) Core(TM) i5-12400F
BenchmarkMakeSliceWithoutAlloc
BenchmarkMakeSliceWithoutAlloc-12 1873 641760 ns/op
PASS
Debugger finished with the exit code 0
// 有预分配内存空间的 BenchmarkMakeSliceWithPreAlloc
goos: windows
goarch: amd64
pkg: codes/go_basic
cpu: 12th Gen Intel(R) Core(TM) i5-12400F
BenchmarkMakeSliceWithPreAlloc
BenchmarkMakeSliceWithPreAlloc-12 6379 188825 ns/op
PASS
Debugger finished with the exit code 0
基准测试结果
BenchmarkMakeSliceWithPreAlloc:这是测试的名称,表示测试创建带有预分配的切片(slice)的性能。
BenchmarkMakeSliceWithPreAlloc-12:测试的具体实例,-12表示测试在12个CPU核心上运行。
6379:表示测试运行了6379次。
188825 ns/op:表示每次操作的平均时间是188825纳秒(ns)。
评论区