From ed6f4e98d3d75f057f35b8f873b6a104944da9df Mon Sep 17 00:00:00 2001 From: pjht Date: Sun, 2 Jun 2024 11:00:04 -0500 Subject: [PATCH] Add basic allocator --- library/std/src/sys/pal/mikros/alloc.rs | 31 ++++++++++++++----------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/library/std/src/sys/pal/mikros/alloc.rs b/library/std/src/sys/pal/mikros/alloc.rs index d715ae45401..661ecacec1d 100644 --- a/library/std/src/sys/pal/mikros/alloc.rs +++ b/library/std/src/sys/pal/mikros/alloc.rs @@ -1,23 +1,26 @@ -use crate::alloc::{GlobalAlloc, Layout, System}; -use crate::ptr::null_mut; +use crate::{ + alloc::{GlobalAlloc, Layout, System}, + ptr::null_mut, +}; + +static mut HEAP: [u8; 16384] = [0u8; 16384]; +static mut HEAP_USED: usize = 0; #[stable(feature = "alloc_system_type", since = "1.28.0")] unsafe impl GlobalAlloc for System { #[inline] - unsafe fn alloc(&self, _layout: Layout) -> *mut u8 { - null_mut() - } - - #[inline] - unsafe fn alloc_zeroed(&self, _layout: Layout) -> *mut u8 { - null_mut() + unsafe fn alloc(&self, layout: Layout) -> *mut u8 { + unsafe { + if 16384 - HEAP_USED < layout.size() { + null_mut() + } else { + let ptr = &mut HEAP[HEAP_USED] as *mut u8; + HEAP_USED += layout.size(); + ptr + } + } } #[inline] unsafe fn dealloc(&self, _ptr: *mut u8, _layout: Layout) {} - - #[inline] - unsafe fn realloc(&self, _ptr: *mut u8, _layout: Layout, _new_size: usize) -> *mut u8 { - null_mut() - } }