这里有一个基准测试:
if(Input.GetKeyDown(KeyCode.Space)) {
say("test text " + count);
count = count + 1;
}
测试结果很奇怪。指标// bench_test.go
package main
import (
"testing"
)
func BenchmarkHello(b *testing.B) {
for i := 0; i < b.N; i++ {
a := 1
a++
}
}
显示为零。我知道变量allocs/op
是一个int类型,不会占用太多内存,但是它不是零。
a
此post指出> go test -bench=. -benchmem
goos: darwin
goarch: amd64
pkg: a
BenchmarkHello-4 2000000000 0.26 ns/op 0 B/op 0 allocs/op
PASS
ok a 0.553s
表示每个操作发生了多少个不同的内存分配(单次迭代)。
但是allocs/op
是什么意思?这是否意味着C中的memory allocation
malloc?
为什么指标set a value for a variable? Is it kind of
为零?
答案 0 :(得分:0)
为什么此指标分配/操作数为零?
package main import ( "testing" ) func BenchmarkHello(b *testing.B) { for i := 0; i < b.N; i++ { a := 1 a++ } }
分配/操作平均值仅计算堆分配,不计算堆栈分配。
分配/运算平均值取整到最接近的整数值。
Go gc编译器是一种优化的编译器。自
{
a := 1
a++
}
什么也没做,只是被遗忘了。
答案 1 :(得分:-3)
来自Go贡献者之一的Dave Cheney:
基准测试工具仅报告堆分配。通过转义分析分配堆栈的成本较低,可能是免费的,因此未报告。