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日 |
358 在 内存管理 中排名
每月下载量 356,339
在 7 个crate中使用 (直接使用2个)
3.5MB
4.5K SLoC
snmalloc-rs
注意:MinGW构建已损坏,可能在未来无法修复。请参阅上游的这个PR。
snmalloc-rs
为 microsoft/snmalloc
提供了一个包装器,使其可以作为Rust的全局分配器使用。snmalloc是一个研究型分配器。其关键设计特性包括
- 由分配内存的同一线程释放的内存不需要任何同步操作。
- 在最初分配内存的不同线程中释放内存,不需要任何锁,而是使用一种新颖的消息传递方案将内存返回给原始分配器,在那里进行回收。
- 分配器使用大范围的页来减少所需元数据的数量。
一些旧基准测试结果可在snmalloc
论文中找到。一些最近的基准测试结果列在bench_suite中。本crate中定义了三个功能
debug
:在snmalloc
中启用Debug
模式。(自0.3.0以来已删除)1mib
:使用1mib
块配置。从0.2.17
开始,这被设置为默认功能(自0.3.0以来已删除)16mib
:使用16mib
块配置。(自 0.3.0 版本以来已移除)cache-friendly
:使分配器更适应缓存(在构建库时将CACHE_FRIENDLY_OFFSET
设置为64
)。native-cpu
:针对主机机的本地 CPU 优化snmalloc
。(这不是默认行为,自0.2.14
版本以来)qemu
:解决 QEMU 环境中madvise
的问题(自 0.3.0 版本以来已移除)stats
:启用统计信息local_dynamic_tls
:解决无法在静态 TLS 块中分配内存的问题build_cc
:使用 cc crate 而不是 cmake(cmake 仍然是默认值)作为构建器(更平台无关)(自 0.3.0 版本以来已移除)usecxx20
:如果可用,启用 C++20 标准usecxx17
:使用 C++17 标准check
:启用额外的检查以提高安全性,请参阅上游 安全文档。请注意,在 Rust 中未启用memcpy
保护。win8compat
:提高旧 Windows 平台的兼容性(移除VirtualAlloc2
和其他新 API 的使用)lto
:与 InterProceduralOptimization/LinkTimeOptimization 链接notls
:启用动态加载,因此禁用 TLS。stats
:启用分配统计信息。
要编译 crate,您需要选择 1mib
或 16mib
以确定块配置
要使用 snmalloc-rs
,请将其添加为依赖项
# Cargo.toml
[dependencies]
snmalloc-rs = "0.3.4"
要将 SnMalloc
设置为全局分配器,请将其添加到您的项目中
#[global_allocator]
static ALLOC: snmalloc_rs::SnMalloc = snmalloc_rs::SnMalloc;
针对 MinGW 用户
mingw
版本仅在 MSYS 环境下的 nightly 分支上进行测试。我们使用动态链接方法。因此,请确保以下库位于您的 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++_static
)libstdc++
已不再是依赖项)
变更日志
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
20.6.0