use core::alloc::{GlobalAlloc, Layout};
use core::ffi::c_void;
use libmimalloc3_sys::*;
pub struct MiMalloc;
unsafe impl GlobalAlloc for MiMalloc {
#[inline]
unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
unsafe {
mi_malloc_aligned(layout.size(), layout.align()) as *mut u8
}
}
#[inline]
unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout) {
unsafe {
mi_free(ptr as *mut c_void);
}
}
#[inline]
unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 {
unsafe {
mi_zalloc_aligned(layout.size(), layout.align()) as *mut u8
}
}
#[inline]
unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 {
unsafe {
mi_realloc_aligned(ptr as *mut c_void, new_size, layout.align()) as *mut u8
}
}
}