17 个版本
0.5.4+5.3.0-patched | 2023年7月27日 |
---|---|
0.5.3+5.3.0-patched | 2023年2月6日 |
0.5.2+5.3.0-patched | 2022年9月29日 |
0.5.1+5.3.0-patched | 2022年6月24日 |
0.1.0 | 2016年1月21日 |
#27 in 内存管理
468,298 每月下载量
用于 204 个 Crates(11 个直接使用)
2MB
51K SLoC
包含(自动工具混淆代码,420KB) configure/configure,(混淆的自动配置代码,84KB) jemalloc/configure.ac
jemalloc-sys - Rust 对 C 库 jemalloc
的绑定
注意:Rust 分配器 API 在
jemallocator
Crates 中实现了jemalloc
。
文档
jemalloc
是一个通用内存分配器,其文档
可以在这里找到
当前 jemalloc 版本: 5.2.1.
平台支持
请参阅 jemallocator
Crates 的平台支持。
特性
大多数特性对应于 jemalloc
特性 - 参考 jemalloc/INSTALL.md
。
Cargo 特性
此 Crates 提供以下 cargo 特性标志
-
profiling
(使用--enable-prof
配置jemalloc
):启用堆分析功能和泄漏检测功能。有关使用详细信息,请参阅 jemalloc 的 "opt.prof" 选项文档。启用时,有几种回溯方法,配置脚本将选择以下列表中似乎可以正常工作的第一个libunwind
(需要 --enable-prof-libunwind)libgcc
(除非 --disable-prof-libgcc)gcc intrinsics
(除非指定了--disable-prof-gcc)
-
stats
(配置jemalloc
时使用--enable-stats
):启用收集统计信息的功能。请参阅jemalloc
的"opt.stats_print
"选项文档,了解使用详情。 -
debug
(配置jemalloc
时使用--enable-debug
):启用断言和验证代码。这会带来显著的性能损失,但在应用程序开发期间非常有用。 -
background_threads_runtime_support
(默认启用):在构建jemalloc-sys
时,在jemalloc
支持的某些POSIX目标上启用后台线程的运行时支持。默认情况下,后台线程在运行时被禁用。此选项允许在运行时动态地启用它们。 -
background_threads
(默认禁用):默认情况下,在运行时启用后台线程。当设置为true时,后台线程根据需要创建(后台线程的数量不会超过CPU数量或活动区域数量)。线程定期运行,并异步处理清理。关闭时,后台线程会同步终止。请注意,在fork(2)
函数后,子进程中的状态将被禁用,而不管父进程的状态如何。请参阅stats.background_thread
以获取相关统计信息。opt.background_thread
可用于设置默认选项。后台线程仅在选定的基于pthread的平台上有可用。 -
unprefixed_malloc_on_supported_platforms
:当禁用时,使用--with-jemalloc-prefix=_rjem_
配置jemalloc
。启用此选项会导致像malloc
这样的符号没有前缀被发出,覆盖了由libc定义的符号。这通常会导致同一程序中链接的C和C++代码也使用jemalloc
。在某些平台上,由于去前缀会导致由于分配器不匹配而导致的段错误,因此始终使用前缀。 -
disable_initial_exec_tls
(默认禁用):当启用时,jemalloc会使用--disable-initial-exec-tls
选项进行构建。它禁用了jemalloc内部线程局部存储的初始-exec TLS模型(在支持显式设置的平台上)。这可以允许jemalloc在程序启动后动态加载(例如,使用dlopen)。如果您遇到错误yourlib.so:无法在静态TLS块中分配内存in static TLS block
,您可能希望启用此选项。 -
disable_cache_oblivious
(默认禁用):当启用时,jemalloc会使用--disable-cache-oblivious
选项进行构建。在这种情况下,所有大分配都作为实现工件进行页面对齐。这可能会严重损害CPU缓存利用率。然而,缓存无关布局每增加一个大型分配就需要一个额外的页面,这可能会对某些应用程序来说不可行。
环境变量
jemalloc选项值通过环境变量传递,使用以下模式:JEMALLOC_SYS_{KEY}=VALUE
,其中KEY
名称对应于jemalloc
的./configure
选项,单词首字母大写,连字符-
被下划线_
替换(见jemalloc/INSTALL.md
)
-
JEMALLOC_SYS_WITH_MALLOC_CONF=<malloc_conf>
:将<malloc_conf>
作为运行时选项字符串嵌入,在malloc_conf
全局变量、/etc/malloc.conf
符号链接和MALLOC_CONF
环境变量之前进行处理(注意:此变量可能以_RJEM_MALLOC_CONF
为前缀)。例如,将脏页的默认衰减时间更改为30秒JEMALLOC_SYS_WITH_MALLOC_CONF=dirty_decay_ms:30000
-
JEMALLOC_SYS_WITH_LG_PAGE=<lg-page>
:指定分配器页面大小的2的底数对数,这必须至少与系统页面大小相同。默认情况下,配置脚本确定主机的页面大小,并将分配器页面大小设置为系统页面大小,因此除非系统页面大小可能在配置和执行之间发生变化,例如在交叉编译时,否则不需要指定此选项。 -
JEMALLOC_SYS_WITH_LG_HUGEPAGE=<lg-hugepage>
:指定系统大页面大小的2的底数对数。在交叉编译或覆盖不支持大页面的系统的默认值时,此选项非常有用。 -
JEMALLOC_SYS_WITH_LG_QUANTUM=<lg-quantum>
:指定最小分配对齐的2的底数对数。jemalloc需要知道满足以下C标准要求的最小对齐(摘自2011年4月12日C11标准草案)如果分配成功,则返回的指针适当地对齐,以便它可以分配给任何具有基本对齐要求的对象类型的指针,然后用于访问此类对象或此类对象的数组在分配的空间中[...]
此设置与架构相关,尽管jemalloc包含大多数常用现代架构的已知安全值,但与GNU libc(glibc)相关的问题可能会影响您的选择。在大多数现代架构上,这要求16字节对齐(即4字节),但glibc的开发者出于性能考虑没有满足这一要求。可以在https://sourceware.org/bugzilla/show_bug.cgi?id=206找到旧讨论。与glibc不同,jemalloc默认遵循C标准(注意:jemalloc在小于量子的大小类上技术上会作弊),但Linux系统已经绕过这种分配器不兼容的问题,这意味着在实践中让jemalloc的最小对齐方式跟随glibc是通常安全的。如果在配置期间指定了
JEMALLOC_SYS_WITH_LG_QUANTUM=3
,jemalloc将提供不是16字节对齐的额外大小类(24、40和56)。 -
JEMALLOC_SYS_WITH_LG_VADDR=<lg-vaddr>
:指定有效虚拟地址位数。默认情况下,配置脚本会尝试检测已知平台上的虚拟地址大小,并在其他情况下选择默认值。此选项在交叉编译时可能很有用。
许可证
此项目可在以下任一许可证下使用:
- Apache许可证第2版(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确说明,否则您根据Apache-2.0许可证提交的任何有意包含在jemalloc-sys
中的贡献,将按照上述方式双许可,没有任何附加条款或条件。