From 2e256c32f8f95d17fa66cca99ae33535238b1ec4 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Thu, 19 Jan 2023 23:10:49 +0800 Subject: [PATCH] feat: add reference rust-memalloc --- __internal/memory/README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/__internal/memory/README.md b/__internal/memory/README.md index 0994c7b..852249b 100644 --- a/__internal/memory/README.md +++ b/__internal/memory/README.md @@ -2,3 +2,26 @@ Reference: * https://radu-matei.com/blog/practical-guide-to-wasm-memory/ [practical-guide-to-wasm-memory.pdf](https://playsecurity.org/doc/showDocDetail.jssp?id=6143) * https://github.com/alec-deason/wasm_plugin/blob/main/guest/src/lib.rs +* https://github.com/reem/rust-memalloc/blob/master/src/lib.rs + +**rust-memalloc** implements `reallocate`: +```rust +pub unsafe fn reallocate(ptr: *mut u8, old_size: usize, new_size: usize) -> *mut u8 { + if old_size > new_size { + let mut buf = Vec::from_raw_parts(ptr, new_size, old_size); + buf.shrink_to_fit(); + + ptr_from_vec(buf) + } else if new_size > old_size { + let additional = new_size - old_size; + + let mut buf = Vec::from_raw_parts(ptr, 0, old_size); + buf.reserve_exact(additional); + + ptr_from_vec(buf) + } else { + ptr + } +} +``` +