]> Cypherpunks repositories - gostls13.git/commit
net: optimize IP.String for IPv4
authorVladimir Kuzmin <vkuzmin@uber.com>
Thu, 8 Mar 2018 03:46:54 +0000 (19:46 -0800)
committerBrad Fitzpatrick <bradfitz@golang.org>
Fri, 9 Mar 2018 17:03:05 +0000 (17:03 +0000)
commitb2d1cd2ad0dd1e0c84e6c3b2eccf77a5bcb84cdd
tree2475258b7168470d01c8551d1fb9bed5b031cf40
parent5f541b11aaa345b4cf0fb37a80c32b704a6854ea
net: optimize IP.String for IPv4

This is optimization is only for IPv4. It allocates a result buffer and
writes the IPv4 octets as dotted decimal into it before converting
it to a string just once, reducing allocations.

Benchmark shows performance improvement:

name             old time/op    new time/op    delta
IPString/IPv4-8     284ns ± 4%     144ns ± 6%  -49.35%  (p=0.000 n=19+17)
IPString/IPv6-8    1.34µs ± 5%    1.14µs ± 5%  -14.37%  (p=0.000 n=19+20)

name             old alloc/op   new alloc/op   delta
IPString/IPv4-8     24.0B ± 0%     16.0B ± 0%  -33.33%  (p=0.000 n=20+20)
IPString/IPv6-8      232B ± 0%      224B ± 0%   -3.45%  (p=0.000 n=20+20)

name             old allocs/op  new allocs/op  delta
IPString/IPv4-8      3.00 ± 0%      2.00 ± 0%  -33.33%  (p=0.000 n=20+20)
IPString/IPv6-8      12.0 ± 0%      11.0 ± 0%   -8.33%  (p=0.000 n=20+20)

Fixes #24306

Change-Id: I4e2d30d364e78183d55a42907d277744494b6df3
Reviewed-on: https://go-review.googlesource.com/99395
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/net/ip.go
src/net/ip_test.go