mirror of
https://github.com/golang/go
synced 2024-11-19 13:54:56 -07:00
syscall: NetlinkRIB, avoid allocation in loop
NetlinkRIB is currently allocating a page sized slice of bytes in a for loop and it's also calling Getpagesize() in the same for loop. This CL changes NetlinkRIB to preallocate the page sized slice of bytes before reaching the for loop. This reduces memory allocations and lowers the number of calls to Getpagesize() to 1 per NetlinkRIB call. This CL reduces the allocated memory from 141.5 MB down to 52 MB in a test. LGTM=crawshaw, dave R=dave, dsymonds, crawshaw CC=bradfitz, dsymonds, golang-codereviews https://golang.org/cl/110920043
This commit is contained in:
parent
3e801416ce
commit
8aea9a00a8
@ -64,9 +64,10 @@ func NetlinkRIB(proto, family int) ([]byte, error) {
|
||||
return nil, err
|
||||
}
|
||||
var tab []byte
|
||||
rbNew := make([]byte, Getpagesize())
|
||||
done:
|
||||
for {
|
||||
rb := make([]byte, Getpagesize())
|
||||
rb := rbNew
|
||||
nr, _, err := Recvfrom(s, rb, 0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
Loading…
Reference in New Issue
Block a user