mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: use integer math for hashmap overLoadFactor
Change-Id: I92cf39a05e738a03d956779d7a1ab1ef8074b2ab Reviewed-on: https://go-review.googlesource.com/54655 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
694875cbf2
commit
733567a186
2 changed files with 6 additions and 5 deletions
|
|
@ -64,8 +64,10 @@ const (
|
||||||
bucketCntBits = 3
|
bucketCntBits = 3
|
||||||
bucketCnt = 1 << bucketCntBits
|
bucketCnt = 1 << bucketCntBits
|
||||||
|
|
||||||
// Maximum average load of a bucket that triggers growth.
|
// Maximum average load of a bucket that triggers growth is 6.5.
|
||||||
loadFactor = 6.5
|
// Represent as loadFactorNum/loadFactDen, to allow integer math.
|
||||||
|
loadFactorNum = 13
|
||||||
|
loadFactorDen = 2
|
||||||
|
|
||||||
// Maximum key or value size to keep inline (instead of mallocing per element).
|
// Maximum key or value size to keep inline (instead of mallocing per element).
|
||||||
// Must fit in a uint8.
|
// Must fit in a uint8.
|
||||||
|
|
@ -984,8 +986,7 @@ func hashGrow(t *maptype, h *hmap) {
|
||||||
|
|
||||||
// overLoadFactor reports whether count items placed in 1<<B buckets is over loadFactor.
|
// overLoadFactor reports whether count items placed in 1<<B buckets is over loadFactor.
|
||||||
func overLoadFactor(count int64, B uint8) bool {
|
func overLoadFactor(count int64, B uint8) bool {
|
||||||
// TODO: rewrite to use integer math and comparison?
|
return count >= bucketCnt && uint64(count) >= loadFactorNum*((uint64(1)<<B)/loadFactorDen)
|
||||||
return count >= bucketCnt && float32(count) >= loadFactor*float32((uint64(1)<<B))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// tooManyOverflowBuckets reports whether noverflow buckets is too many for a map with 1<<B buckets.
|
// tooManyOverflowBuckets reports whether noverflow buckets is too many for a map with 1<<B buckets.
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ func reflect_memmove(to, from unsafe.Pointer, n uintptr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// exported value for testing
|
// exported value for testing
|
||||||
var hashLoad = loadFactor
|
var hashLoad = float32(loadFactorNum) / float32(loadFactorDen)
|
||||||
|
|
||||||
//go:nosplit
|
//go:nosplit
|
||||||
func fastrand() uint32 {
|
func fastrand() uint32 {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue