diff --git a/src/lib.rs b/src/lib.rs
index 589ccb38ab2357acafeb48df61e6217a7fc18709..9425e7d14bff7fbd90f405d9679fc47919d69231 100644
--- a/src/lib.rs
+++ b/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) -> ! {
diff --git a/src/platform/allocator/dlmalloc.rs b/src/platform/allocator/dlmalloc.rs
index a5a890f7d37418c9e9d6cfedc23c3edfd53d7692..97acd7fa69d010a2b56ca7207679f2b794aefd77 100644
--- a/src/platform/allocator/dlmalloc.rs
+++ b/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