From 7e30dfb18c375b7bd6a6d62d99a31c7a151f3f99 Mon Sep 17 00:00:00 2001 From: MariusVanDerWijden Date: Thu, 30 Oct 2025 12:41:21 +0100 Subject: [PATCH 1/3] core/vm: refactor memory resize --- core/vm/memory.go | 7 +++++-- core/vm/memory_test.go | 7 +++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/core/vm/memory.go b/core/vm/memory.go index 5e11e83748f..aa4b93c009e 100644 --- a/core/vm/memory.go +++ b/core/vm/memory.go @@ -76,10 +76,13 @@ func (m *Memory) Set32(offset uint64, val *uint256.Int) { val.PutUint256(m.store[offset:]) } -// Resize resizes the memory to size func (m *Memory) Resize(size uint64) { if uint64(m.Len()) < size { - m.store = append(m.store, make([]byte, size-uint64(m.Len()))...) + if uint64(cap(m.store)) > size { + m.store = m.store[:size] + } else { + m.store = append(m.store, make([]byte, size-uint64(m.Len()))...) + } } } diff --git a/core/vm/memory_test.go b/core/vm/memory_test.go index 41389b729aa..3890d18cb5a 100644 --- a/core/vm/memory_test.go +++ b/core/vm/memory_test.go @@ -83,3 +83,10 @@ func TestMemoryCopy(t *testing.T) { } } } + +func BenchmarkResize(b *testing.B) { + memory := NewMemory() + for i := range b.N { + memory.Resize(uint64(i)) + } +} From 8c5a76e5417c706fc2b046ce5a3bda911d6284d3 Mon Sep 17 00:00:00 2001 From: MariusVanDerWijden Date: Thu, 30 Oct 2025 12:51:50 +0100 Subject: [PATCH 2/3] core/vm: re-add doc --- core/vm/memory.go | 1 + 1 file changed, 1 insertion(+) diff --git a/core/vm/memory.go b/core/vm/memory.go index aa4b93c009e..de58c748718 100644 --- a/core/vm/memory.go +++ b/core/vm/memory.go @@ -76,6 +76,7 @@ func (m *Memory) Set32(offset uint64, val *uint256.Int) { val.PutUint256(m.store[offset:]) } +// Resize resizes the memory to size func (m *Memory) Resize(size uint64) { if uint64(m.Len()) < size { if uint64(cap(m.store)) > size { From c51e1b54a55744a75ce9eb57115e41bcbfd19947 Mon Sep 17 00:00:00 2001 From: MariusVanDerWijden Date: Mon, 10 Nov 2025 09:41:21 +0100 Subject: [PATCH 3/3] core/vm: clear memory --- core/vm/memory.go | 1 + 1 file changed, 1 insertion(+) diff --git a/core/vm/memory.go b/core/vm/memory.go index de58c748718..69c709531ef 100644 --- a/core/vm/memory.go +++ b/core/vm/memory.go @@ -44,6 +44,7 @@ func (m *Memory) Free() { // To reduce peak allocation, return only smaller memory instances to the pool. const maxBufferSize = 16 << 10 if cap(m.store) <= maxBufferSize { + clear(m.store) m.store = m.store[:0] m.lastGasCost = 0 memoryPool.Put(m)