#[no_mangle] pub unsafe fn malloc_1(len: usize) -> *mut u8 { let mut buffer: std::mem::ManuallyDrop> = std::mem::ManuallyDrop::new(Vec::with_capacity(len as usize)); buffer.as_mut_ptr() as *mut u8 } #[no_mangle] pub unsafe fn free_1(ptr: *mut u8, len: usize) { std::mem::drop(Vec::from_raw_parts(ptr as *mut u8, 0, len as usize)) } #[no_mangle] pub unsafe fn malloc_2(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 unsafe fn free_2(ptr: *mut u8, len: usize) { let data = Vec::from_raw_parts(ptr, len, len); std::mem::drop(data); } #[no_mangle] pub unsafe fn malloc_3(len: usize) -> *mut u8 { let align = std::mem::align_of::(); let layout = std::alloc::Layout::from_size_align_unchecked(len, align); std::alloc::alloc(layout) } #[no_mangle] pub unsafe fn free_3(ptr: *mut u8, len: usize) { let align = std::mem::align_of::(); let layout = std::alloc::Layout::from_size_align_unchecked(len, align); std::alloc::dealloc(ptr, layout) } fn main() { unsafe { println!("Malloc & Free - 1"); let p = malloc_1(1024); free_1(p, 1024); println!("Malloc & Free - 2"); let p = malloc_2(1024); free_2(p, 1024); println!("Malloc & Free - 3"); let p = malloc_3(1024); free_3(p, 1024); } }