• Keith Randall's avatar
    runtime: optimize some hash lookups. · a696ae56
    Keith Randall authored
    When comparing strings, check these (in order):
    - length mismatch => not equal
    - string pointer equal => equal
    - if length is short:
      - memeq on body
    - if length is long:
      - compare first&last few bytes, if different => not equal
      - save entry as a possible match
      - after checking every entry, if there is only one possible
        match, use memeq on that entry.  Otherwise, fallback to hash.
    
    benchmark                 old ns/op    new ns/op    delta
    BenchmarkSameLengthMap           43            4  -89.77%
    
    Fixes #5194.
    Update #3885.
    
    R=golang-dev, bradfitz, khr, rsc
    CC=golang-dev
    https://golang.org/cl/12128044
    a696ae56
mapspeed_test.go 5.45 KB