РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
972 of 1593 menu

Метод testing.B.ReportAllocs

Метод ReportAllocs типа testing.B включает вывод статистики по выделениям памяти в отчете бенчмарка. Он не принимает параметров и не возвращает значений. После вызова этого метода в бенчмарке, при его запуске с флагом -benchmem, в выводе будут отображаться количество выделений и общий объем выделенной памяти на одну итерацию.

Синтаксис

b.ReportAllocs()

Пример

Давайте рассмотрим бенчмарк для функции, которая создает слайс строк. Включим отчет по выделениям с помощью ReportAllocs:

package main import ( "testing" ) func makeSlice() []string { s := make([]string, 0, 10) for i := 0; i < 10; i++ { s = append(s, "test") } return s } func BenchmarkMakeSlice(b *testing.B) { b.ReportAllocs() for i := 0; i < b.N; i++ { makeSlice() } }

Результат выполнения бенчмарка с флагом -benchmem:

"BenchmarkMakeSlice-8 1000000 1234 ns/op 80 B/op 1 allocs/op"

В выводе видно, что на одну операцию выделяется 80 байт и происходит 1 выделение памяти (allocs/op).

Пример

Рассмотрим бенчмарк без вызова ReportAllocs. Статистика по памяти не будет отображаться в отчете, даже если указан флаг -benchmem:

package main import ( "testing" ) func makeMap() map[int]string { m := make(map[int]string) for i := 0; i < 10; i++ { m[i] = "value" } return m } func BenchmarkMakeMap(b *testing.B) { for i := 0; i < b.N; i++ { makeMap() } }

Результат выполнения бенчмарка с флагом -benchmem:

"BenchmarkMakeMap-8 500000 3456 ns/op"

В выводе отсутствует информация о выделениях памяти, так как метод ReportAllocs не был вызван.

Пример

Метод ReportAllocs можно вызывать в любом месте бенчмарка, но рекомендуется делать это в начале функции для единообразия:

package main import ( "testing" ) func concatStrings() string { s := "" for i := 0; i < 100; i++ { s += "a" } return s } func BenchmarkConcatStrings(b *testing.B) { b.ReportAllocs() for i := 0; i < b.N; i++ { concatStrings() } }

Результат выполнения бенчмарка с флагом -benchmem:

"BenchmarkConcatStrings-8 30000 45678 ns/op 10000 B/op 100 allocs/op"

Теперь в отчете отображается количество выделений и объем памяти на одну операцию, что позволяет оценить эффективность использования памяти.

Смотрите также

  • метод testing.B.ResetTimer,
    который сбрасывает таймер бенчмарка
  • метод testing.B.StartTimer,
    который запускает таймер бенчмарка
  • метод testing.B.StopTimer,
    который останавливает таймер бенчмарка
  • функцию testing.AllocsPerRun,
    которая измеряет количество выделений памяти за выполнение функции
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить