40个版本

0.3.6 2024年6月12日
0.3.5 2024年2月29日
0.3.4 2023年6月29日
0.3.3 2022年6月17日
0.2.8 2020年3月21日

#39 in 内存管理

Download history 52095/week @ 2024-05-04 67272/week @ 2024-05-11 64390/week @ 2024-05-18 68538/week @ 2024-05-25 82318/week @ 2024-06-01 84853/week @ 2024-06-08 71493/week @ 2024-06-15 67770/week @ 2024-06-22 74182/week @ 2024-06-29 79969/week @ 2024-07-06 80370/week @ 2024-07-13 80746/week @ 2024-07-20 76651/week @ 2024-07-27 72877/week @ 2024-08-03 97560/week @ 2024-08-10 110389/week @ 2024-08-17

373,696 每月下载量
5 crates 中使用

MIT 许可证

3.5MB
4.5K SLoC

C++ 4K SLoC // 0.1% comments Rust 424 SLoC // 0.0% comments

snmalloc-rs

注意:MinGW构建已损坏,可能在未来无法修复。请参阅上游的此PR

MSVC/MinGW/Linux/MacOS: Actions状态

FreeBSD: 构建状态

snmalloc-rsmicrosoft/snmalloc 提供了一个包装器,使其可以作为Rust的全局分配器。snmalloc是一个研究分配器。其关键设计特性包括

  • 由分配它的同一线程释放的内存不需要任何同步操作。
  • 在最初分配它的不同线程中释放内存,不需要任何锁,而是使用一种新颖的消息传递方案将内存返回给原始分配器,在那里它被回收。
  • 分配器使用大范围的页面来减少所需的元数据量。

一些旧的基准测试结果可在snmalloc 论文 中找到。一些最新的基准测试结果列在 bench_suite 中。此crate中定义了三个特性

  • debug:在 snmalloc 中启用 Debug 模式。
  • 1mib:使用 1mib 块配置。从 0.2.17 开始,这被设置为默认功能(自0.3.0以来已删除)
  • 16mib:使用 16mib 块配置。(自0.3.0以来已删除)
  • cache-friendly:使分配器更符合缓存友好性(在构建库时将 CACHE_FRIENDLY_OFFSET 设置为 64)。(自 0.3.0 版本以来已删除)
  • native-cpu:针对主机机的本地 CPU 优化 snmalloc。(这不是默认行为,自 0.2.14 以来)
  • qemu:解决 QEMU 环境中的 madvise 问题
  • stats:启用统计信息(自 0.3.0 版本以来已删除)
  • local_dynamic_tls:解决无法在静态 TLS 块中分配内存的问题
  • build_cc:使用 cc crate 而不是 cmake 作为构建器(更具有平台无关性)
  • usecxx20:如果可用,则启用 C++20 标准(自 0.3.0 版本以来已删除)
  • usecxx17:使用 C++17 标准
  • check:启用额外的检查以提高安全性,请参阅上游 安全文档。请注意,Rust 中未启用 memcpy 保护。
  • win8compat:提高旧 Windows 平台的兼容性(移除 VirtualAlloc2 和其他新 API 的使用)
  • lto:与 InterProceduralOptimization/LinkTimeOptimization 链接
  • notls:启用动态加载,因此禁用 TLS。
  • stats:启用分配统计信息。

要编译 crate,您需要选择 1mib16mib 以确定块配置

要使用 snmalloc-rs,请将其作为依赖项添加

# Cargo.toml
[dependencies]
snmalloc-rs = "0.3.4"

要将 SnMalloc 设置为全局分配器,请将其添加到您的项目中

#[global_allocator]
static ALLOC: snmalloc_rs::SnMalloc = snmalloc_rs::SnMalloc;

对于 MinGW 用户

mingw 版本仅在 nightly 分支和 MSYS 环境下进行测试。我们使用动态链接方法。因此,请确保以下库位于您的 PATH

  • winpthread
  • atomic
  • stdc++
  • gcc_s

注意:自版本 0.2.12 以来,我们不再需要您为 mingw 目标提供额外的环境变量。

对于 Android 跨平台编译

  • ANDROID_NDK 必须作为环境变量提供
  • ANDROID_PLATFORM 可以作为可选环境变量传递
  • ANDROID_ABI 由 CMake 自动检测
  • 特性 android-lld 可以用来将 snmalloc 的链接器设置为 lld
  • 特性 android-shared-std 可以用来将 snmalloc 的 STL 库设置为 c++_shared(它默认使用 c++_staticlibstdc++ 已不再是依赖项)

变更日志

0.3.4

  • 跟踪上游到版本 0.6.2。

0.3.3

  • 跟踪上游以修复 Linux PAL 错误。

0.3.2

  • 跟踪上游以启用旧 Linux 变体。

0.3.1

  • 修复了 build_cc 功能(在 0.3.0 版本中已损坏)。
  • 修复了 native-cpu 功能(在 0.3.0 版本中已损坏)。

0.3.0

  • 发布以支持 snmalloc 0.6.0。

0.3.0-beta.1

  • beta 发布以支持 snmalloc 2 0.6.0

依赖项