Skip to content

Instantly share code, notes, and snippets.

@onokonem
Created February 27, 2020 11:20
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save onokonem/6bf710b85ecb4be6f34c3fc304a7d8ab to your computer and use it in GitHub Desktop.
Save onokonem/6bf710b85ecb4be6f34c3fc304a7d8ab to your computer and use it in GitHub Desktop.
Итого:
https://play.golang.org/p/2gcz2XI8ZNA
```
BenchmarkPrealloc100-4 8803648 138 ns/op 896 B/op 1 allocs/op
BenchmarkZero100-4 7887441 153 ns/op 896 B/op 1 allocs/op
BenchmarkNil100-4 7610407 158 ns/op 896 B/op 1 allocs/op
BenchmarkPrealloc1000-4 1000000 1195 ns/op 8192 B/op 1 allocs/op
BenchmarkZero1000-4 1000000 1120 ns/op 8192 B/op 1 allocs/op
BenchmarkNil1000-4 1079455 1072 ns/op 8192 B/op 1 allocs/op
BenchmarkPrealloc10000-4 111652 9582 ns/op 81920 B/op 1 allocs/op
BenchmarkZero10000-4 136356 7717 ns/op 81920 B/op 1 allocs/op
BenchmarkNil10000-4 135385 8163 ns/op 81920 B/op 1 allocs/op
BenchmarkPrealloc100000-4 9241 131374 ns/op 802816 B/op 1 allocs/op
BenchmarkZero100000-4 16102 78291 ns/op 802816 B/op 1 allocs/op
BenchmarkNil100000-4 15561 75536 ns/op 802816 B/op 1 allocs/op
BenchmarkPrealloc1000000-4 915 1212400 ns/op 8003585 B/op 1 allocs/op
BenchmarkZero1000000-4 1830 575773 ns/op 8003585 B/op 1 allocs/op
BenchmarkNil1000000-4 1861 677818 ns/op 8003585 B/op 1 allocs/op
BenchmarkPrealloc10000000-4 79 16316018 ns/op 80003077 B/op 1 allocs/op
BenchmarkZero10000000-4 130 9195659 ns/op 80003088 B/op 1 allocs/op
BenchmarkNil10000000-4 130 8717368 ns/op 80003085 B/op 1 allocs/op
```
видно, что на 10К элементов производительность еще практически одинаковая, а на 100К уже - вопреки интуитивным предположениям - вариант с преаллокацией медленнее.
глядим в профайлинг:
преаллокация
```
flat flat% sum% cum cum%
0.85s 46.20% 46.20% 0.85s 46.20% runtime.memmove
0.41s 22.28% 68.48% 0.41s 22.28% runtime.memclrNoHeapPointers
0.31s 16.85% 85.33% 0.31s 16.85% runtime.usleep
0.08s 4.35% 89.67% 0.08s 4.35% runtime.nanotime
```
без преаллокации
```
flat flat% sum% cum cum%
1.32s 53.44% 53.44% 1.32s 53.44% runtime.memmove
0.70s 28.34% 81.78% 0.70s 28.34% runtime.usleep
0.13s 5.26% 87.04% 0.13s 5.26% runtime.nanotime
```
`runtime.memclrNoHeapPointers` - это как раз забивание памяти нулями
mistery solved
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment