rlp: optimize intsize #32421 (#1403)

goos: darwin
goarch: arm64
pkg: github.com/ethereum/go-ethereum/rlp
cpu: Apple M4
        │   old.txt   │               new.txt               │
        │   sec/op    │   sec/op     vs base                │
Intsize   2.175n ± 5%   1.050n ± 4%  -51.76% (p=0.000 n=10)

Co-authored-by: cui <cuiweixie@gmail.com>
This commit is contained in:
Daniel Liu 2025-09-03 15:37:14 +08:00 committed by GitHub
parent e2edc41b50
commit ed1570c2d1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -21,6 +21,7 @@ import (
"fmt"
"io"
"math/big"
"math/bits"
"reflect"
"github.com/XinFinOrg/XDPoSChain/rlp/internal/rlpstruct"
@ -487,9 +488,8 @@ func putint(b []byte, i uint64) (size int) {
// intsize computes the minimum number of bytes required to store i.
func intsize(i uint64) (size int) {
for size = 1; ; size++ {
if i >>= 8; i == 0 {
return size
}
if i == 0 {
return 1
}
return (bits.Len64(i) + 7) / 8
}