mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: fix hashmap load factor computation
overLoadFactor wasn't really doing what it says it does. It was reporting overOrEqualToLoadFactor. That's actually what we want when adding an entry to a map, but it isn't what we want when constructing a map in the first place. The impetus for this change is that if you make a map with a hint of exactly 8 (which happens, for example, with the unitMap in time/format.go), we allocate 2 buckets for it instead of 1. Instead, make overLoadFactor really report when it is > the max allowed load factor, not >=. Adjust the callers who want to ensure that the map is no more than the max load factor after an insertion by adding a +1 to the current (pre-addition) size. Change-Id: Ie8d85344800a9a870036b637b1031ddd9e4b93f9 Reviewed-on: https://go-review.googlesource.com/61053 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Martin Möhrmann <moehrmann@google.com>
This commit is contained in:
parent
a6a92b1867
commit
dbe3522c7f
4 changed files with 40 additions and 6 deletions
|
|
@ -376,3 +376,8 @@ func (rw *RWMutex) Lock() {
|
|||
func (rw *RWMutex) Unlock() {
|
||||
rw.rw.unlock()
|
||||
}
|
||||
|
||||
func MapBuckets(m map[int]int) int {
|
||||
h := *(**hmap)(unsafe.Pointer(&m))
|
||||
return 1 << h.B
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue