Skip to content
This repository was archived by the owner on Dec 15, 2025. It is now read-only.

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

Open
odeke-em wants to merge 1 commit intojson-iterator:masterfrom
orijtech:remove-unnecessary-byteslice-
Open

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

Conversation

@odeke-em
Copy link
Copy Markdown

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

We can improve and reduce allocations simply by invoking

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

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)

/cc @kirbyquerby @willpoint

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

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 subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant