• Vladimir Kuzmin's avatar
    net: optimize IP.String for IPv4 · b2d1cd2a
    Vladimir Kuzmin authored
    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/99395Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
    b2d1cd2a
ip_test.go 23.9 KB