Что означает allocs/op и B/op для сравнения?

Когда я запускаю свои тесты с помощью 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

Основываясь на моем понимании:

  • 10000 - количество итераций for i := 0; i < b.N; i++ {.
  • XXX ns/op - приблизительное время, необходимое для завершения одной итерации

Но даже после чтения документов я не могу понять, что означают B/op и allocs/op.


Мое предположение заключается в том, что allocs/op имеет какое-то отношение к сборке мусора и распределению памяти (чем меньше, тем лучше).

Может ли кто-нибудь дать хорошее объяснение значения этих значений. Также было бы неплохо узнать, зачем идти вверх и основные шаги по их сокращению (я понимаю, что это специфичный тест, но могут быть некоторые универсальные подсказки, которые работают во многих случаях)

Ответы

Ответ 1

allocs/op означает, сколько раз было выделено выделение памяти для каждого op (одиночная итерация).

B/op - сколько байтов было выделено за op.