go-ethereum/trie/bintrie
CPerezz 0c0c68da6c
trie/bintrie: align hashInternal deep branch with shallow shape
Deep branch used a pooled hash.Hash: h.Write(lh[:]) passed a subslice
through the interface, forcing lh/rh to heap; h.Sum(nil) allocated
32 B per rehash; empty children allocated 32 B via make([]byte, HashSize).

Mirror the shallow branch: write left/right hashes into a stack
[64]byte via copy() and call sha256.Sum256 in one shot. No interface
writes, no pool round-trip, no Sum(nil), no empty-child make.

Benchmark delta (M4 Pro, go1.24.0, --count=5 --benchtime=5s):

  before: 9133 ns/op  6526 B/op  95 allocs/op
  after:  8783 ns/op  5623 B/op  67 allocs/op

  vs upstream/master@53ff723cc: allocs/op -50.0% (was -29.1%),
  bytes/op -85.1% (was -82.7%), time/op +18.7% (was +23.4%).
2026-04-19 08:12:54 +02:00
..
binary_node.go trie/bintrie: unexport package-internal arena identifiers 2026-04-18 18:49:04 +02:00
binary_node_test.go trie/bintrie: unexport package-internal arena identifiers 2026-04-18 18:49:04 +02:00
hashed_node.go trie/bintrie: use type alias for HashedNode 2026-04-18 18:38:37 +02:00
hashed_node_test.go trie/bintrie: unexport package-internal arena identifiers 2026-04-18 18:49:04 +02:00
hasher.go trie/bintrie: revert sha256 helper + parallelHashDepth constant 2026-04-18 18:50:45 +02:00
internal_node.go trie/bintrie: unexport package-internal arena identifiers 2026-04-18 18:49:04 +02:00
internal_node_test.go trie/bintrie: unexport package-internal arena identifiers 2026-04-18 18:49:04 +02:00
iterator.go trie/bintrie: unexport package-internal arena identifiers 2026-04-18 18:49:04 +02:00
iterator_test.go trie/bintrie: unexport package-internal arena identifiers 2026-04-18 18:49:04 +02:00
key_encoding.go trie/bintrie: spec change, big endian hashing of slot key (#34670) 2026-04-13 09:42:37 +02:00
node_ref.go trie/bintrie: unexport package-internal arena identifiers 2026-04-18 18:49:04 +02:00
node_store.go trie/bintrie: trim storeChunkSize doc comment 2026-04-18 18:53:23 +02:00
stem_node.go trie/bintrie: keep StemNode.Hash's data array on stack 2026-04-19 08:06:18 +02:00
stem_node_test.go trie/bintrie: unexport package-internal arena identifiers 2026-04-18 18:49:04 +02:00
store_commit.go trie/bintrie: align hashInternal deep branch with shallow shape 2026-04-19 08:12:54 +02:00
store_ops.go trie/bintrie: inline get/InsertValuesAtStem wrappers 2026-04-18 18:59:27 +02:00
trie.go trie/bintrie: reuse path buffer in collectNodes 2026-04-19 08:00:33 +02:00
trie_test.go trie/bintrie: add BenchmarkCollectNodesSparseWrite for allocation tracking 2026-04-18 19:12:55 +02:00