3个版本

0.3.2 2024年6月4日
0.3.1 2024年4月24日
0.3.0 2024年2月26日

内存管理类别中排名第141

Download history 138/week @ 2024-04-15 315/week @ 2024-04-22 295/week @ 2024-04-29 263/week @ 2024-05-06 62/week @ 2024-05-13 98/week @ 2024-05-20 133/week @ 2024-05-27 392/week @ 2024-06-03 8/week @ 2024-06-10 215/week @ 2024-07-01 304/week @ 2024-07-08 296/week @ 2024-07-15 161/week @ 2024-07-22 107/week @ 2024-07-29

每月下载量达912次
用于syd

MIT 许可证

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