perf: less alloc (#25360)

Co-authored-by: Alex | Interchain Labs <alex@cosmoslabs.io>
This commit is contained in:
cui
2025-10-15 21:37:22 +00:00
committed by GitHub
co-authored by Alex | Interchain Labs
parent b578aa71cb
commit ce8bed2fd5
2 changed files with 55 additions and 5 deletions
+3 -5
View File
@@ -224,11 +224,9 @@ func loadPruningSnapshotHeights(db dbm.DB) ([]int64, error) {
}
func int64SliceToBytes(slice ...int64) []byte {
bz := make([]byte, 0, len(slice)*8)
for _, ph := range slice {
buf := make([]byte, 8)
binary.BigEndian.PutUint64(buf, uint64(ph))
bz = append(bz, buf...)
bz := make([]byte, len(slice)*8)
for i, ph := range slice {
binary.BigEndian.PutUint64(bz[i<<3:], uint64(ph))
}
return bz
}
+52
View File
@@ -1,6 +1,7 @@
package pruning
import (
"encoding/binary"
"errors"
"fmt"
"testing"
@@ -454,3 +455,54 @@ func TestLoadSnapshotHeights_PruneNothing(t *testing.T) {
require.Nil(t, manager.LoadSnapshotHeights(db.NewMemDB()))
}
func TestInt64SliceToBytes(t *testing.T) {
tests := []struct {
name string
input []int64
expect []byte
}{
{
name: "empty slice",
input: []int64{},
expect: []byte{},
},
{
name: "single value",
input: []int64{1},
expect: func() []byte {
b := make([]byte, 8)
binary.BigEndian.PutUint64(b, 1)
return b
}(),
},
{
name: "multiple values",
input: []int64{1, 2},
expect: func() []byte {
b := make([]byte, 16)
binary.BigEndian.PutUint64(b[0:], 1)
binary.BigEndian.PutUint64(b[8:], 2)
return b
}(),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := int64SliceToBytes(tt.input...)
require.Equal(t, tt.expect, got, "bytes mismatch")
})
}
}
func BenchmarkInt64SliceToBytes(b *testing.B) {
data := make([]int64, 1024)
for i := range data {
data[i] = int64(i)
}
for b.Loop() {
_ = int64SliceToBytes(data...)
}
}