mirror of
https://github.com/golang/go
synced 2024-11-19 05:24:42 -07:00
cmd/link: grow rdBuf lazily
Counting the final buffer size usually doesn't result in the buffer growing, so assume that it doesn't need to grow and only grow if necessary. name old secs new secs delta LinkCmdGo 0.49 ± 4% 0.48 ± 3% -1.31% (p=0.000 n=95+95) name old MaxRSS new MaxRSS delta LinkCmdGo 122k ± 4% 121k ± 5% ~ (p=0.065 n=96+100) Change-Id: I85e7f5688a61ef5ef2b1b7afe56507e71c5bd5b1 Reviewed-on: https://go-review.googlesource.com/21509 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Shahar Kohanim <skohanim@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Crawshaw <crawshaw@golang.org>
This commit is contained in:
parent
a9ea36afbb
commit
bc94282306
@ -507,8 +507,8 @@ func (r *objReader) readUint8() uint8 {
|
||||
|
||||
func (r *objReader) readString() string {
|
||||
n := r.readInt()
|
||||
if len(r.rdBuf) < n {
|
||||
r.rdBuf = make([]byte, n)
|
||||
if cap(r.rdBuf) < n {
|
||||
r.rdBuf = make([]byte, 2*n)
|
||||
}
|
||||
r.readFull(r.rdBuf[:n])
|
||||
return string(r.rdBuf[:n])
|
||||
@ -533,11 +533,8 @@ func (r *objReader) readSymName() string {
|
||||
if err != nil {
|
||||
log.Fatalf("%s: unexpectedly long symbol name", r.pn)
|
||||
}
|
||||
// Calculate needed scratch space, accounting for the growth
|
||||
// of all the `"".` substrings to pkg+".":
|
||||
need := len(origName) + maxInt(0, bytes.Count(origName, emptyPkg)*(len(pkg)+len(".")-len(emptyPkg)))
|
||||
if len(r.rdBuf) < need {
|
||||
r.rdBuf = make([]byte, need)
|
||||
if cap(r.rdBuf) < n {
|
||||
r.rdBuf = make([]byte, 2*n)
|
||||
}
|
||||
adjName := r.rdBuf[:0]
|
||||
for {
|
||||
@ -548,6 +545,7 @@ func (r *objReader) readSymName() string {
|
||||
// using the rfBuf (also no longer used) as the scratch space.
|
||||
// TODO: use bufio.Reader.Discard if available instead?
|
||||
r.readFull(r.rdBuf[:n])
|
||||
r.rdBuf = adjName[:0] // in case 2*n wasn't enough
|
||||
return s
|
||||
}
|
||||
adjName = append(adjName, origName[:i]...)
|
||||
@ -562,10 +560,3 @@ func (r *objReader) readSymIndex() *LSym {
|
||||
i := r.readInt()
|
||||
return r.refs[i]
|
||||
}
|
||||
|
||||
func maxInt(a, b int) int {
|
||||
if a > b {
|
||||
return a
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user