5个版本

0.2.1 2023年4月27日
0.2.0 2022年5月27日
0.1.5 2021年12月22日
0.1.4 2021年12月22日
0.1.1 2021年8月13日

#71 in 内存管理

Download history 7787/week @ 2024-03-14 4869/week @ 2024-03-21 9191/week @ 2024-03-28 9471/week @ 2024-04-04 12987/week @ 2024-04-11 6828/week @ 2024-04-18 4925/week @ 2024-04-25 6063/week @ 2024-05-02 5111/week @ 2024-05-09 6344/week @ 2024-05-16 5206/week @ 2024-05-23 7918/week @ 2024-05-30 7267/week @ 2024-06-06 15959/week @ 2024-06-13 8434/week @ 2024-06-20 5857/week @ 2024-06-27

39,028 每月下载量
用于 27 个crates (7 直接)

MIT 许可证

475KB
9K SLoC

C 8K SLoC // 0.2% comments Rust 1K SLoC // 0.0% comments

历史上最好的、最高级别的、最新的MiMalloc绑定

mimalloc 1.7.9 稳定版

ci doc.rs crates.io

为什么创建这个

在仓库 https://github.com/purpleprotocol/mimalloc_rust 中我没有看到任何数据类型,它也没有提供mimalloc提供的所有功能,换句话说,它是垃圾。

使用方法

首先添加到依赖项

[dependencies]
mimalloc-rust = "0.2.1"

然后设置全局分配器

use mimalloc_rust::*;

#[global_allocator]
static GLOBAL_MIMALLOC: GlobalMiMalloc = GlobalMiMalloc;

lib.rs:

本crate提供了对mimalloc的最佳绑定

示例用法

首先添加到依赖项

[dependencies]
mimalloc-rust = "0.2"

然后设置全局分配器

use mimalloc_rust::*;

#[global_allocator]
static GLOBAL_MIMALLOC: GlobalMiMalloc = GlobalMiMalloc;

分配器API!

#![feature(allocator_api)]
use std::{ffi::c_void, mem::ManuallyDrop};

use mimalloc_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);
}

依赖项