170 похожих чатов

Подскажите пожалуйста, почему в бенчмарках результат примерно одинаковый? Хотел проверить разницу

в производительности for range, когда используется копирование значения, и обращение к указателю

По моей логике, первый бенчмарк должен отработать хуже, т.к
for _, v := range numbers
копирует значение по индексу из numbers в v

func BenchmarkForCopyArrayValue(b *testing.B) {
numbers := [...]int{1, 2, 3, 4, 5}
for i := 0; i < b.N; i++ {
for _, v := range numbers {
temp := v
_ = temp
}
}
}

func BenchmarkForCopyArrayValuePointer(b *testing.B) {
numbers := [...]int{1, 2, 3, 4, 5}
for i := 0; i < b.N; i++ {
for i := range numbers {
temp := numbers[i]
_ = temp
}
}
}


BenchmarkForCopyArrayValue-8 549499458 2.179 ns/op 0 B/op 0 allocs/op
BenchmarkForCopyArrayValuePointer-8 545401737 2.159 ns/op 0 B/op 0 allocs/op

8 ответов

23 просмотра

так там же, вроде, в обоих случаях копирование из массива по индексу, но в одном случае это делается внутри рейнджа, а во втором случае это делается в теле цикла я ничего не гарантирую

Так а где здесь указатель?

если массив хранится в куче, то указатель на массив. Я не знаю точно, как это в го работает хотя если массив на стеке, то там... ну, не знаю, смотря как указатель рассматривать. Ну, типа, оффсет - это же тоже в какой-то степени указатель... я, опять же, ничего не гарантирую, но в данном случае могу ещё и сильно промахнуться

megahomyak
если массив хранится в куче, то указатель на масси...

Конкретно в коде который приведет выше, указатель в принципе не используется. Аллокация происходит на стеке что в бенчмарке по указателю, что по значению. Конкретно для текущего примера нету вообще никакого смысла использовать аллокацию на куче, так как время GC будет забирать больше времени чем процесс обращения по стеку

Какой бенч - такие и результаты

1) Надо сделать 2 отдельные реализации и в них уже передавать массив по указателю 2) Массив надо делать более жирным(допустим, на 1m элементов) 3) Лучше считать какую-то сумму элементов итп.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта