mirror of
https://github.com/golang/go.git
synced 2025-11-01 01:00:56 +00:00
cmd/gc: allocate non-escaping maps on stack
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/3508 Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: Dmitry Vyukov <dvyukov@google.com>
This commit is contained in:
parent
aed88be021
commit
b3be360f16
12 changed files with 178 additions and 168 deletions
|
|
@ -1751,3 +1751,20 @@ func slicerunetostring2() {
|
|||
r := []rune{1, 2, 3} // ERROR "\[\]rune literal does not escape"
|
||||
sink = string(r) // ERROR "string\(r\) escapes to heap"
|
||||
}
|
||||
|
||||
func makemap0() {
|
||||
m := make(map[int]int) // ERROR "make\(map\[int\]int\, 0\) does not escape"
|
||||
m[0] = 0
|
||||
m[1]++
|
||||
delete(m, 1)
|
||||
sink = m[0]
|
||||
}
|
||||
|
||||
func makemap1() map[int]int {
|
||||
return make(map[int]int) // ERROR "make\(map\[int\]int\, 0\) escapes to heap"
|
||||
}
|
||||
|
||||
func makemap2() {
|
||||
m := make(map[int]int) // ERROR "make\(map\[int\]int\, 0\) escapes to heap"
|
||||
sink = m
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue