hack

package
v0.0.0-...-6e93ed8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 21, 2024 License: Apache-2.0 Imports: 3 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// DefBucketMemoryUsageForMapStrToSlice = bucketSize*(1+unsafe.Sizeof(string) + unsafe.Sizeof(slice))+2*ptrSize
	// ref https://github.com/golang/go/blob/go1.15.6/src/reflect/type.go#L2162.
	// The bucket size may be changed by golang implement in the future.
	// Golang Map needs to acquire double the memory when expanding,
	// and the old buckets will be released after the data is migrated.
	// Considering the worst case, the data in the old bucket cannot be migrated in time, and the old bucket cannot
	// be GCed, we expand the bucket size to 1.5 times to estimate the memory usage of Golang Map.
	DefBucketMemoryUsageForMapStrToSlice = (8*(1+16+24) + 16) / 2 * 3
	// DefBucketMemoryUsageForMapIntToPtr = bucketSize*(1+unsafe.Sizeof(uint64) + unsafe.Sizeof(pointer))+2*ptrSize
	DefBucketMemoryUsageForMapIntToPtr = (8*(1+8+8) + 16) / 2 * 3
	// DefBucketMemoryUsageForMapStringToAny = bucketSize*(1+unsafe.Sizeof(string) + unsafe.Sizeof(interface{}))+2*ptrSize
	DefBucketMemoryUsageForMapStringToAny = (8*(1+16+16) + 16) / 2 * 3
	// DefBucketMemoryUsageForSetString = bucketSize*(1+unsafe.Sizeof(string) + unsafe.Sizeof(struct{}))+2*ptrSize
	DefBucketMemoryUsageForSetString = (8*(1+16+0) + 16) / 2 * 3
	// DefBucketMemoryUsageForSetFloat64 = bucketSize*(1+unsafe.Sizeof(float64) + unsafe.Sizeof(struct{}))+2*ptrSize
	DefBucketMemoryUsageForSetFloat64 = (8*(1+8+0) + 16) / 2 * 3
	// DefBucketMemoryUsageForSetInt64 = bucketSize*(1+unsafe.Sizeof(int64) + unsafe.Sizeof(struct{}))+2*ptrSize
	DefBucketMemoryUsageForSetInt64 = (8*(1+8+0) + 16) / 2 * 3
)
View Source
const (
	// LoadFactorDen is the denominator of load factor
	LoadFactorDen = 2
)

LoadFactor is the maximum average load of a bucket that triggers growth is 6.5 in Golang Map. Represent as LoadFactorNum/LoadFactorDen, to allow integer math. They are from the golang definition. ref: https://github.com/golang/go/blob/go1.13.15/src/runtime/map.go#L68-L71

Variables

View Source
var LoadFactorNum = 13

LoadFactorNum is the numerator of load factor

Functions

func EstimateBucketMemoryUsage

func EstimateBucketMemoryUsage[K comparable, V any]() uint64

EstimateBucketMemoryUsage returns the estimated memory usage of a bucket in a map.

func GetBytesFromPtr

func GetBytesFromPtr(ptr unsafe.Pointer, length int) []byte

GetBytesFromPtr return a bytes array from the given ptr and length

func Slice

func Slice(s string) []byte

Slice converts string to slice without copy. Use at your own risk.

Types

type MutableString

type MutableString string

MutableString can be used as string via string(MutableString) without performance loss.

func String

func String(b []byte) MutableString

String converts slice to MutableString without copy. The MutableString can be converts to string without copy. Use it at your own risk.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL