Key sizes 4 and 8 have special case hashing code. They are intended for int32, int64, and pointers, but your [4]byte and [8]byte take advantage of it as well.
On Sunday, March 26, 2023 at 3:05:52 AM UTC-7 Amit Lavon wrote: > Hi gophers, > > Some code I am writing uses byte-arrays ([X]byte) as keys in a map. I > benchmarked the performance of map operations using different X's and found > that 4 and 8 are about twice as fast compared to 5, 6, 7 (see below). > > Can someone explain this phenomenon? > I'd like to learn about it so I can take it in consideration when choosing > key types. > > > Code: > > type byteArray interface { > [4]byte | [5]byte | [6]byte | [7]byte | [8]byte > } > > func benchmarkMaps[T byteArray](b *testing.B) { > m := map[T]int{} > var t T > for i := 0; i < b.N; i++ { > m[t]++ > } > } > > func BenchmarkMaps(b *testing.B) { > b.Run("4", benchmarkMaps[[4]byte]) > b.Run("5", benchmarkMaps[[5]byte]) > b.Run("6", benchmarkMaps[[6]byte]) > b.Run("7", benchmarkMaps[[7]byte]) > b.Run("8", benchmarkMaps[[8]byte]) > } > > Results: > > 4: 17.01 ns/op > 5: 36.02 ns/op > 6: 38.24 ns/op > 7: 29.92 ns/op > 8: 16.58 ns/op > > go1.20 > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/baa4ed12-faa6-409c-825c-bd632a180c8cn%40googlegroups.com.