• Dmitry Vyukov's avatar
    cmd/gc: allocate non-escaping maps on stack · b3be360f
    Dmitry Vyukov authored
    Extend escape analysis to make(map[k]v).
    If it does not escape, allocate temp buffer for hmap and one bucket on stack.
    
    There are 75 cases of non-escaping maps in std lib.
    
    benchmark                                    old allocs     new allocs     delta
    BenchmarkConcurrentStmtQuery                 16161          15161          -6.19%
    BenchmarkConcurrentTxQuery                   17658          16658          -5.66%
    BenchmarkConcurrentTxStmtQuery               16157          15156          -6.20%
    BenchmarkConcurrentRandom                    13637          13114          -3.84%
    BenchmarkManyConcurrentQueries               22             20             -9.09%
    BenchmarkDecodeComplex128Slice               250            188            -24.80%
    BenchmarkDecodeFloat64Slice                  250            188            -24.80%
    BenchmarkDecodeInt32Slice                    250            188            -24.80%
    BenchmarkDecodeStringSlice                   2250           2188           -2.76%
    BenchmarkNewEmptyMap                         1              0              -100.00%
    BenchmarkNewSmallMap                         2              0              -100.00%
    
    benchmark                old ns/op     new ns/op     delta
    BenchmarkNewEmptyMap     124           55.7          -55.08%
    BenchmarkNewSmallMap     317           148           -53.31%
    
    benchmark                old allocs     new allocs     delta
    BenchmarkNewEmptyMap     1              0              -100.00%
    BenchmarkNewSmallMap     2              0              -100.00%
    
    benchmark                old bytes     new bytes     delta
    BenchmarkNewEmptyMap     48            0             -100.00%
    BenchmarkNewSmallMap     192           0             -100.00%
    
    Fixes #5449
    
    Change-Id: I24fa66f949d2f138885d9e66a0d160240dc9e8fa
    Reviewed-on: https://go-review.googlesource.com/3508Reviewed-by: 's avatarKeith Randall <khr@golang.org>
    Run-TryBot: Dmitry Vyukov <dvyukov@google.com>
    b3be360f
escape2.go 34.4 KB