mirror of
https://github.com/golang/go
synced 2024-11-23 19:40:08 -07:00
encoding/xml: avoid an allocation for tags without attributes
Before, an array of size 4 would always be allocated even if a tag doesn't have any attributes. Now that array is allocated only if needed. benchmark old allocs new allocs delta BenchmarkUnmarshal 191 176 -8.5% Change-Id: I4d214b228883d0a6e892c0d6eb00dfe2da84c116 Reviewed-on: https://go-review.googlesource.com/4160 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
3d56fe6d94
commit
8f02df76f9
@ -723,7 +723,7 @@ func (d *Decoder) rawToken() (Token, error) {
|
||||
return nil, d.err
|
||||
}
|
||||
|
||||
attr = make([]Attr, 0, 4)
|
||||
attr = []Attr{}
|
||||
for {
|
||||
d.space()
|
||||
if b, ok = d.mustgetc(); !ok {
|
||||
@ -747,7 +747,11 @@ func (d *Decoder) rawToken() (Token, error) {
|
||||
|
||||
n := len(attr)
|
||||
if n >= cap(attr) {
|
||||
nattr := make([]Attr, n, 2*cap(attr))
|
||||
nCap := 2 * cap(attr)
|
||||
if nCap == 0 {
|
||||
nCap = 4
|
||||
}
|
||||
nattr := make([]Attr, n, nCap)
|
||||
copy(nattr, attr)
|
||||
attr = nattr
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user