9a06995460
Turns out, it's almost always allocating because we're mostly dealing with small integers while the buffer size is calculated in 8-byte chunks here, so preallocated buffer is always insufficient. name old time/op new time/op delta ToPreallocatedBytes-8 28.5ns ± 7% 19.7ns ± 5% -30.72% (p=0.000 n=10+10) name old alloc/op new alloc/op delta ToPreallocatedBytes-8 16.0B ± 0% 0.0B -100.00% (p=0.000 n=10+10) name old allocs/op new allocs/op delta ToPreallocatedBytes-8 1.00 ± 0% 0.00 -100.00% (p=0.000 n=10+10) Fix StorageItem reuse at the same time. We don't copy when getting values from the storage, but we don when we're putting them, so buffer reuse could corrupt old values.
15 lines
222 B
Go
15 lines
222 B
Go
package bigint
|
|
|
|
import (
|
|
"math/big"
|
|
"testing"
|
|
)
|
|
|
|
func BenchmarkToPreallocatedBytes(b *testing.B) {
|
|
v := big.NewInt(100500)
|
|
buf := make([]byte, 4)
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
_ = ToPreallocatedBytes(v, buf[:0])
|
|
}
|
|
}
|