Skip to content

all: remove unnecessary string([]byte) conversion in fmt.Sprintf yet %s#921

Open
odeke-em wants to merge 1 commit intogoogle:masterfrom
orijtech:remove-unnecessary-string-byteslice-in-fmtSprintf
Open

all: remove unnecessary string([]byte) conversion in fmt.Sprintf yet %s#921
odeke-em wants to merge 1 commit intogoogle:masterfrom
orijtech:remove-unnecessary-string-byteslice-in-fmtSprintf

Conversation

@odeke-em
Copy link

Noticed from Orijtech's continuous benchmarking product "Bencher" per

https://dashboard.github.orijtech.com/benchmark/3245b8e4bbbd44a597480319aaa4b9fe

that there is a bunch of code in the wild that invokes:

fmt.Sprintf("%s", string([]byte(...)))

yet the "%s" format specifier in fmt has a purpose:

%s	the uninterpreted bytes of the string or slice

as well as using the "%c" format specifier

which led to big improvements across every dimension:

  • CPU time reduction by 11+% (ns/op)
  • throughput improvement by 13+% (MBs/op)
  • allocations reduction by 45+% (B/op)
  • number of allocations reduction by 18+% (alloc/op)

Noticed from Orijtech's continuous benchmarking product "Bencher" per

https://dashboard.github.orijtech.com/benchmark/3245b8e4bbbd44a597480319aaa4b9fe

that there is a bunch of code in the wild that invokes:

    fmt.Sprintf("%s", string([]byte(...)))

yet the "%s" format specifier in fmt has a purpose:

    %s	the uninterpreted bytes of the string or slice

as well as using the "%c" format specifier

which led to big improvements across every dimension:
* CPU time reduction by 11+% (ns/op)
* throughput improvement by 13+% (MBs/op)
* allocations reduction by 45+% (B/op)
* number of allocations reduction by 18+% (alloc/op)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant