From 137e04eda0b0beec85c7580bfa2a08e0e9b08552 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Thu, 19 Jan 2023 22:19:54 +0800 Subject: [PATCH] feat: add __internal/memory --- README.md | 4 +++- __internal/memory/Cargo.lock | 7 +++++++ __internal/memory/Cargo.toml | 8 +++++++ __internal/memory/README.md | 3 +++ __internal/memory/src/main.rs | 39 +++++++++++++++++++++++++++++++++++ 5 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 __internal/memory/Cargo.lock create mode 100644 __internal/memory/Cargo.toml create mode 100644 __internal/memory/README.md create mode 100644 __internal/memory/src/main.rs diff --git a/README.md b/README.md index 6fcec52..bc1623e 100644 --- a/README.md +++ b/README.md @@ -90,6 +90,8 @@ Project or files: ├── __image │   ├── plotters │   └── svg +├── __internal +│   └── memory ├── __lang │   ├── boa │   ├── java @@ -261,6 +263,6 @@ Project or files: ├── vec.rs └── while.rs -230 directories, 39 files +232 directories, 39 files ``` diff --git a/__internal/memory/Cargo.lock b/__internal/memory/Cargo.lock new file mode 100644 index 0000000..1fad482 --- /dev/null +++ b/__internal/memory/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "memory" +version = "0.1.0" diff --git a/__internal/memory/Cargo.toml b/__internal/memory/Cargo.toml new file mode 100644 index 0000000..db4f6ef --- /dev/null +++ b/__internal/memory/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "memory" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/__internal/memory/README.md b/__internal/memory/README.md new file mode 100644 index 0000000..4b0aca5 --- /dev/null +++ b/__internal/memory/README.md @@ -0,0 +1,3 @@ + +Reference: +* https://radu-matei.com/blog/practical-guide-to-wasm-memory/ diff --git a/__internal/memory/src/main.rs b/__internal/memory/src/main.rs new file mode 100644 index 0000000..858506e --- /dev/null +++ b/__internal/memory/src/main.rs @@ -0,0 +1,39 @@ +#[no_mangle] +pub fn malloc_1(len: usize) -> *mut u8 { + let mut buf = Vec::with_capacity(len); + let ptr = buf.as_mut_ptr(); + std::mem::forget(buf); + return ptr; +} + +#[no_mangle] +pub fn free_1(ptr: *mut u8, len: usize) { + let data = unsafe { Vec::from_raw_parts(ptr, len, len) }; + std::mem::drop(data); +} + +#[no_mangle] +pub fn malloc_2(len: usize) -> *mut u8 { + let align = std::mem::align_of::(); + let layout = unsafe { std::alloc::Layout::from_size_align_unchecked(len, align) }; + unsafe { std::alloc::alloc(layout) } +} + +#[no_mangle] +pub fn free_2(ptr: *mut u8, len: usize) { + let align = std::mem::align_of::(); + let layout = unsafe { std::alloc::Layout::from_size_align_unchecked(len, align) }; + unsafe { std::alloc::dealloc(ptr, layout) } +} + +fn main() { + println!("Malloc-1"); + let p = malloc_1(1024); + println!("Free-1"); + free_1(p, 1024); + + println!("Malloc-2"); + let p = malloc_2(1024); + println!("Free-2"); + free_2(p, 1024); +}