github.com/aarzilli/tools@v0.0.0-20151123112009-0d27094f75e0/runtimepb/x_test.go (about) 1 package runtimepb 2 3 import ( 4 "fmt" 5 "math/rand" 6 "testing" 7 "unsafe" 8 ) 9 10 type testStruct struct { 11 // i1, i2 int 12 } 13 14 var preventCompilerOptimization int 15 16 func TestMemoryConsumptionOfMap(t *testing.T) { 17 18 fLogger, fDumper := AllocLogger() 19 lenPrev := 0 20 21 var m map[int]*testStruct 22 m = make(map[int]*testStruct, 10*1000) 23 24 for i := 0; i < 100*1000; i++ { 25 26 key := rand.Intn(i + 1) 27 ts := testStruct{} 28 m[key] = &ts 29 if i%10000 == 0 { 30 fmt.Printf("%11v | ", len(m)-lenPrev) 31 lenPrev = len(m) 32 fLogger() 33 } 34 } 35 fmt.Printf("\n") 36 // _ = m 37 fDumper() 38 39 } 40 41 func TestMapBooleanVsEmpty(t *testing.T) { 42 43 var bl bool = true 44 var empty struct{} 45 46 const mapSize = 10 * 1000 47 const numElements = 10 * 1000 48 49 fmt.Println("boolean consumes ", unsafe.Sizeof(bl), " byte(s)") 50 fmt.Println("empty consumes ", unsafe.Sizeof(empty), " byte(s)") 51 52 fLogger, fDumper := AllocLogger() 53 54 m1 := make(map[int]struct{}, mapSize) 55 fLogger() 56 57 m2 := make(map[int]bool, mapSize) 58 fLogger() 59 60 // fmt.Println(unsafe.Sizeof(m1)) 61 // fmt.Println(unsafe.Sizeof(m2)) 62 63 cntr := 0 64 for i := 0; i < numElements; i++ { 65 m1[i] = empty 66 if i%(numElements/5) == numElements/5-1 { 67 fLogger() 68 } 69 cntr++ 70 preventCompilerOptimization = cntr 71 } 72 fLogger() 73 74 for i := 0; i < numElements; i++ { 75 m2[i] = true 76 if i%(numElements/5) == numElements/5-1 { 77 fLogger() 78 } 79 cntr++ 80 preventCompilerOptimization = cntr 81 } 82 fDumper() 83 84 }