Procházet zdrojové kódy

Initial allocator structure

oddcoder před 4 roky
rodič
revize
9a1efda121
2 změnil soubory, kde provedl 21 přidání a 4 odebrání
  1. 2 2
      src/lib.rs
  2. 19 2
      src/platform/allocator/dlmalloc.rs

+ 2 - 2
src/lib.rs

@@ -59,10 +59,10 @@ pub mod platform;
 pub mod start;
 pub mod sync;
 
-use crate::platform::{Allocator, Pal, Sys};
+use crate::platform::{Allocator, Pal, Sys, NEWALLOCATOR};
 
 #[global_allocator]
-static ALLOCATOR: Allocator = Allocator;
+static ALLOCATOR: Allocator = NEWALLOCATOR;
 
 #[no_mangle]
 pub extern "C" fn relibc_panic(pi: &::core::panic::PanicInfo) -> ! {

+ 19 - 2
src/platform/allocator/dlmalloc.rs

@@ -1,4 +1,7 @@
-use core::alloc::{GlobalAlloc, Layout};
+use core::{
+    alloc::{GlobalAlloc, Layout},
+    sync::atomic::{AtomicUsize, Ordering},
+};
 
 use super::types::*;
 
@@ -9,8 +12,22 @@ extern "C" {
     fn dlfree(mem: *mut c_void);
 }
 
-pub struct Allocator;
+pub struct Allocator {
+    mstate: AtomicUsize,
+}
+
+pub const NEWALLOCATOR:Allocator = Allocator{
+    mstate: AtomicUsize::new(0),
+};
 
+impl Allocator {
+    pub fn set_bookkeeper(&self, mstate: usize) {
+        self.mstate.store(mstate, Ordering::Relaxed);
+    }
+    fn get_bookKeeper(&self) ->usize {
+        self.mstate.load(Ordering::Relaxed)
+    }
+}
 unsafe impl<'a> GlobalAlloc for Allocator {
     unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
         alloc_align(layout.size(), layout.align()) as *mut u8