title: go benchmark and gc: B/op alloc/op
body: <p>benchmark code: </p>
  
  <pre><code>func BenchmarkSth(b *testing.B) {
      var x []int
      b.ResetTimer()
      for i := 0; i &lt; b.N; i++ {
          x = append(x, i)
      }
  }
  </code></pre>
  
  <p>result: </p>
  
  <pre><code>BenchmarkSth-4    50000000    20.7 ns/op    40 B/op    0 allocs/op 
  </code></pre>
  
  <p>question/s:</p>
  
  <ul>
  <li>where did 40 B/op come from? (any way of tracing + instructions is greatly appreciated)</li>
  <li>how is it possible to have 40 B/op while having 0 allocs?</li>
  <li>which one affects GC and how? (B/op or allocs/op)</li>
  <li>is it really possible to have 0 B/op using append?</li>
  </ul>