Source file
test/fixedbugs/issue15277.go
1
2
3
4
5
6
7
8
9 package main
10
11 import "runtime"
12
13 type big [10 << 20]byte
14
15 func f(x *big, start int64) {
16 if delta := inuse() - start; delta < 9<<20 {
17 println("after alloc: expected delta at least 9MB, got: ", delta)
18 }
19 runtime.KeepAlive(x)
20 x = nil
21 if delta := inuse() - start; delta > 1<<20 {
22 println("after drop: expected delta below 1MB, got: ", delta)
23 }
24 x = new(big)
25 if delta := inuse() - start; delta < 9<<20 {
26 println("second alloc: expected delta at least 9MB, got: ", delta)
27 }
28 runtime.KeepAlive(x)
29 }
30
31 func main() {
32 x := inuse()
33 f(new(big), x)
34 }
35
36 func inuse() int64 {
37 runtime.GC()
38 var st runtime.MemStats
39 runtime.ReadMemStats(&st)
40 return int64(st.Alloc)
41 }
42
View as plain text