1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
#[cfg(not(feature = "std"))] use core::alloc::{GlobalAlloc, Layout}; #[cfg(not(feature = "std"))] use crate::libc; pub struct Allocator; #[cfg(not(feature = "std"))] unsafe impl GlobalAlloc for Allocator { #[inline] unsafe fn alloc(&self, layout: Layout) -> *mut u8 { libc::malloc(layout.size()) as *mut u8 } #[inline] unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 { libc::calloc(layout.size(), 1) as *mut u8 } #[inline] unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout) { libc::free(ptr as *mut libc::c_void) } #[inline] unsafe fn realloc(&self, ptr: *mut u8, _layout: Layout, new_size: usize) -> *mut u8 { libc::realloc(ptr as *mut libc::c_void, new_size) as *mut u8 } } #[cfg(not(feature = "std"))] #[alloc_error_handler] fn _alloc_error(_layout: Layout) -> ! { panic!("Allocation error"); }