Здравствуйте
Изучаю язык go и добрался до использования бенчмарков.
У меня есть модуль popcount (да, из книги The Go Programming Language) в нём 4 функции.
go версии 1.6, пишу в intellij idea 2016
Сам вопрос, если я запускаю тест, чтобы проверить время работы функции, то у меня результаты
PASS
BenchmarkPopCount1-8 200000000 6.57 ns/op
BenchmarkPopCountByLoop-8 100000000 13.0 ns/op
BenchmarkPopCountByShifting-8 20000000 63.9 ns/op
BenchmarkPopCountByClearing-8 1000000000 2.41 ns/op
ok github.com/user/popcount 9.110s
А если я запуская тестирования на покрытие, то результаты
PASS
BenchmarkPopCount1-8 100000000 13.0 ns/op
BenchmarkPopCountByLoop-8 20000000 79.6 ns/op
BenchmarkPopCountByShifting-8 1000000 1079 ns/op
BenchmarkPopCountByClearing-8 50000000 27.6 ns/op
coverage: 100.0% of statements
ok github.com/user/popcount 7.157s
С чем может быть связан такой большой рост времени у функции
BenchmarkPopCountByShifting?
её код
func PopCountByShifting(x uint64) int {
n := 0
shifted := x
for i := uint(0); i < 64; i++ {
// get left byte
if ((shifted & 1) == 1) {
n++
}
shifted >>= 1
}
return n
}