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?
source
share