在基准测试中,allocs/op和B/op的含义是什么?

Sal*_*ali 30 benchmarking go

当我运行我的基准时go test -v -bench=. -benchmem,我看到以下结果.

f1     10000        120860 ns/op        2433 B/op         28 allocs/op
f2     10000        120288 ns/op        2288 B/op         26 allocs/op
Run Code Online (Sandbox Code Playgroud)

根据我的理解:

  1. 10000是迭代次数for i := 0; i < b.N; i++ {.
  2. XXX ns/op 是一次迭代完成所需的大致时间

但即使阅读了文档后,我也无法找到什么B/opallocs/op意思.


我的猜测是,allocs/op与垃圾收集和内存分配有关(越少越好).

任何人都可以对这些值的含义做出很好的解释.同样很高兴知道为什么要上升和减少它们的主要步骤(我意识到这是测试特定的,但可能有一些通用提示在许多情况下都有效)

Not*_*fer 37

allocs/op 表示每个op发生多少个不同的内存分配(单次迭代).

B/op 是每个操作分配了多少字节.

  • 是否有正式文档来解释这些指标? (2认同)
  • @RyanLv:不,这意味着内存已_分配_,而不是修改。为变量设置值只会修改预分配内存的内容。 (2认同)
  • @RyanLv内存分配意味着从操作系统获取更多内存。这样做会减少您和系统中其他程序的可用内存。 (2认同)