map的bucketShift
来源:1-4 Go 程序是怎么跑起来的
慕尼黑2207807
2021-05-26 21:40:49
// bucketShift returns 1<<b, optimized for code generation.
func bucketShift(b uint8) uintptr {
// Masking the shift amount allows overflow checks to be elided.
return uintptr(1) << (b & (sys.PtrSize*8 - 1))
}
为什么和b进行与运算是63为 那这样如果b是64的话 这块计算的值就是了
1回答
Xargin
2021-05-27
我想了想,应该是这么回事:
b 不可能是 64,你算算 2 ^ 64 个 bucket 的话,会占多少内存,所以不太可能有这么多
按注释写的,这里保证移位 <= 63,所以一定不会溢出,少掉一次溢出检查
相似问题