blob: be9614c9006cc846a8881275a0cc94f16b73e87a [file] [log] [blame] [edit]
use crate::MiMalloc;
use core::ffi::c_void;
impl MiMalloc {
/// Get the mimalloc version.
///
/// For mimalloc version 1.8.6, this will return 186.
pub fn version(&self) -> u32 {
unsafe { ffi::mi_version() as u32 }
}
/// Return the amount of available bytes in a memory block.
///
/// # Safety
/// `ptr` must point to a memory block allocated by mimalloc, or be null.
#[inline]
pub unsafe fn usable_size(&self, ptr: *const u8) -> usize {
ffi::mi_usable_size(ptr as *const c_void)
}
}
#[cfg(test)]
mod test {
use super::*;
use core::alloc::GlobalAlloc;
use core::alloc::Layout;
#[test]
fn it_gets_version() {
let version = MiMalloc.version();
assert!(version != 0);
}
#[test]
fn it_checks_usable_size() {
unsafe {
let layout = Layout::from_size_align(8, 8).unwrap();
let alloc = MiMalloc;
let ptr = alloc.alloc(layout);
let usable_size = alloc.usable_size(ptr);
alloc.dealloc(ptr, layout);
assert!(usable_size >= 8);
}
}
}