From 5322e441c59c42b7fc622f65dad591c0fe653f69 Mon Sep 17 00:00:00 2001 From: Jesse Brault Date: Sun, 29 Dec 2024 10:23:16 -0600 Subject: [PATCH] Fix memory leak of constant by no longer needing to make copy of constant. --- src/vm/mod.rs | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/src/vm/mod.rs b/src/vm/mod.rs index 31964eb..02604e9 100644 --- a/src/vm/mod.rs +++ b/src/vm/mod.rs @@ -367,23 +367,11 @@ pub fn run_byte_code(state: &mut DvmState, context: &DvmContext, byte_code: &[u8 }; let constant = lib.constants.get(const_id).unwrap(); let DmConstant::String(s) = constant; - - // Alloc memory for constant - let size = s.len(); - let layout = Layout::from_size_align(size, 1).unwrap(); - let raw_pointer = unsafe { alloc(layout) }; - - // Move constant to memory - let bytes = s.as_bytes(); - for i in 0..size { - unsafe { - raw_pointer.add(i).write(bytes[i]); - } - } + let pointer = s.as_ptr(); // Store the pointer metadata in target registers. - state.registers[address_register] = DvmValue::USize(raw_pointer as usize); - state.registers[size_register] = DvmValue::USize(size); + state.registers[address_register] = DvmValue::USize(pointer as usize); + state.registers[size_register] = DvmValue::USize(s.len()); } ALLOC_RAW => { // Allocates a raw number of bytes, with the number of bytes determined by the value