1
0
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:
Brian Smith 2015-02-07 03:51:13 +00:00 committed by Brad Fitzpatrick
parent 3d56fe6d94
commit 8f02df76f9

View File

@ -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
}