3个版本
0.3.2 | 2024年6月4日 |
---|---|
0.3.1 | 2024年4月24日 |
0.3.0 | 2024年2月26日 |
在内存管理类别中排名第141
每月下载量达912次
用于syd
17KB
395 行
史上最佳、最高级别、最新版本的Rust对MiMalloc的绑定
mimalloc 2.1.7 稳定版
创建原因
- 在仓库
https://github.com/LemonHX/mimalloc-rust/pulls
中有许多长时间未合并的pull request,换句话说,它已经过时。一旦这些pull request被合并,我将停止维护这个crate。 - 在仓库
https://github.com/purpleprotocol/mimalloc_rust
中我没有看到任何数据类型,它也没有提供mimalloc的所有功能,换句话说,它已经过时。
使用方法
首先添加到依赖项
[dependencies]
mimalloc2-rust = "0.3"
然后设置全局分配器
use mimalloc2_rust::*;
#[global_allocator]
static GLOBAL_MIMALLOC: GlobalMiMalloc = GlobalMiMalloc;
lib.rs
:
此crate提供了对mimalloc的最佳绑定
示例用法
首先添加到依赖项
[dependencies]
mimalloc2-rust = "0.3"
然后设置全局分配器
use mimalloc2_rust::*;
#[global_allocator]
static GLOBAL_MIMALLOC: GlobalMiMalloc = GlobalMiMalloc;
分配器API!
#![feature(allocator_api)]
use std::{ffi::c_void, mem::ManuallyDrop};
use mimalloc2_rust::{
heap::{HeapVisitor, MiMallocHeap},
raw::{
heap::{mi_heap_area_t, mi_heap_delete, mi_heap_new},
types::mi_heap_t,
},
with_heap, GlobalMiMalloc,
};
#[derive(Debug, Clone)]
struct TestHeap {
heap: *mut mi_heap_t,
}
use std::ops::Deref;
impl Deref for TestHeap {
type Target = *mut mi_heap_t;
fn deref(&self) -> &Self::Target {
&self.heap
}
}
impl TestHeap {
fn new() -> Self {
Self {
heap: unsafe { mi_heap_new() },
}
}
}
impl Drop for TestHeap {
fn drop(&mut self) {
unsafe { mi_heap_delete(self.heap) }
}
}
#[test]
fn test_allocator_api() {
let allocator = MiMallocHeap::new(TestHeap::new());
let mut b: Vec<u8, &MiMallocHeap<TestHeap>> = Vec::new_in(&allocator);
b.push(1);
b.push(2);
assert_eq!(b[0], 1);
assert_eq!(b[1], 2);
}
依赖项
~520–710KB
~13K SLoC