17 个版本

0.5.4+5.3.0-patched2023年7月27日
0.5.3+5.3.0-patched2023年2月6日
0.5.2+5.3.0-patched2022年9月29日
0.5.1+5.3.0-patched2022年6月24日
0.1.0 2016年1月21日

#27 in 内存管理

Download history 102421/week @ 2024-04-08 106097/week @ 2024-04-15 110110/week @ 2024-04-22 104132/week @ 2024-04-29 99703/week @ 2024-05-06 109540/week @ 2024-05-13 114570/week @ 2024-05-20 100964/week @ 2024-05-27 108943/week @ 2024-06-03 123866/week @ 2024-06-10 109185/week @ 2024-06-17 120243/week @ 2024-06-24 96555/week @ 2024-07-01 129461/week @ 2024-07-08 114468/week @ 2024-07-15 122638/week @ 2024-07-22

468,298 每月下载量
用于 204 个 Crates(11 个直接使用)

MIT/Apache

2MB
51K SLoC

C 47K SLoC // 0.1% comments Visual Studio Project 1.5K SLoC M4 659 SLoC // 0.1% comments Rust 592 SLoC // 0.1% comments Shell 381 SLoC // 0.3% comments C++ 372 SLoC // 0.1% comments Python 262 SLoC // 0.3% comments Visual Studio Solution 126 SLoC XSL 10 SLoC

包含(自动工具混淆代码,420KB) configure/configure,(混淆的自动配置代码,84KB) jemalloc/configure.ac

jemalloc-sys - Rust 对 C 库 jemalloc 的绑定

Travis-CI Status Latest Version docs

注意:Rust 分配器 API 在 jemallocator Crates 中实现了 jemalloc

文档

jemalloc 是一个通用内存分配器,其文档

可以在这里找到

  • API 文档
  • Wiki(设计文档、演示、分析、调试、调整等)

当前 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.0许可证提交的任何有意包含在jemalloc-sys中的贡献,将按照上述方式双许可,没有任何附加条款或条件。

依赖项