Golang基准测试中的alloc / op零是什么?

时间:2019-07-01 08:19:52

标签: go

这里有一个基准测试:

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为零?

2 个答案:

答案 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:

基准测试工具仅报告堆分配。通过转义分析分配堆栈的成本较低,可能是免费的,因此未报告。

参考

Why is this simple benchmark showing zero allocations?