Why is runtime.KeepAlive or assignment to a package-level sink often used like this in benchmarks?var sink int func BenchmarkSum(b *testing.B) { for i := 0; i < b.N; i++ { sink = compute() } }