Minimize memory allocation for go card

I am currently reworking optimization of some highly used code in go. My question boils down to the following code fragment (copied with memory allocations from the pprof list command). As you can see, all distributions are performed in the line where the card is filled (line 959).

ROUTINE ======================== cart.BenchmarkMapWithOutCapacityFixVal in /.../cart_test.go
   3328966    3328966 (flat, cum) 15.50% of Total
         .          .    954:
         .          .    955:func BenchmarkMapWithOutCapacityFixVal(b *testing.B) {
         .          .    956:   for i := 0; i < b.N; i++ {
         .          .    957:       m := make(map[int]float32)
         .          .    958:       for k := 0; k < 10; k++ {
   3328966    3328966    959:           m[k] = 0.434295723423
         .          .    960:       }
         .          .    961:   }
         .          .    962:}

Here is what I am trying to do: I am trying to allocate memory before a loop (internal) so that unnecessary allocations do not occur:

ROUTINE ======================== cart.BenchmarkMapWithCapacityFixVal in /.../cart_test.go
   3214263    3214263 (flat, cum) 14.97% of Total
         .          .    963:
         .          .    964:func BenchmarkMapWithCapacityFixVal(b *testing.B) {
         .          .    965:   for i := 0; i < b.N; i++ {
   3048075    3048075    966:       m := make(map[int]float32, 10)
         .          .    967:       for k := 0; k < 10; k++ {
    166188     166188    968:           m[k] = 0.434295723423
         .          .    969:       }
         .          .    970:   }
         .          .    971:}

Why are there still distributions on line 968 (second pattern), and how can I correctly distribute the map before the inner loop?

+4
source share
1 answer

. , , . make(map..., X) X - , , , , . , , .

, , . .

+8

All Articles