scudo内存分配器杂记

Scudo Hardened Allocator — LLVM 12 documentation

JeMalloc - 知乎 (zhihu.com)

GitHub - llvm-mirror/compiler-rt: Project moved to: https://github.com/llvm/llvm-project

GitHub - AOSP-Common/android_external_scudo

Android scudo功能介绍 - 简书 (jianshu.com)

Android Native | Scudo内存分配器 (juejin.cn)  ——  这篇文章写得不错!!!强烈推荐!

1. 为什么叫chunk?

2. 怎样评价一个分配器的优缺点?benchmark?

Memory Allocator Benchmarks (locklessinc.com)

3. Android为什么svelte模式下默认的allocator依然是jemalloc?(可能是Chunk header开销增加?)为什么RAM较小用jemalloc更好?

4. Class 0用于存放内存管理的元数据,这样做浪费256M的虚拟内存?(对于64bit虚拟空间好像不算回事,32bit呢?)

 

 

 

### 关于 `dlmalloc` 的使用方法和实现细节 #### 什么是 `dlmalloc` `dlmalloc` 是由 Doug Lea 开发的一个通用动态内存分配器,广泛用于各种操作系统和应用程序中。它是一种高效、灵活的内存管理工具,支持多种平台并具有良好的可移植性。 --- #### `dlmalloc` 的核心功能 `dlmalloc` 提供了一组标准接口来管理和分配堆内存,主要包括以下几个函数: - **`void* malloc(size_t size)`**: 分配指定大小的内存块。 - **`void free(void* ptr)`**: 释放之前通过 `malloc` 分配的内存块。 - **`void* realloc(void* ptr, size_t new_size)`**: 调整已分配内存块的大小。 - **`void* calloc(size_t nmemb, size_t size)`**: 分配一块连续空间,并将其初始化为零[^1]。 这些接口与 C 标准库中的同名函数兼容,因此可以轻松替代系统的默认实现。 --- #### 编译和链接 `dlmalloc` 为了在项目中使用 `dlmalloc`,通常需要先下载其源码文件(通常是单个 `.c` 文件)。以下是编译它的基本流程: ```bash clang -O0 -g -W -Wall -Wextra -shared -fPIC dlmalloc.c -o libdlmalloc.so ``` 上述命令会生成一个共享库 `libdlmalloc.so`,可以在程序运行时加载该库以覆盖系统默认的 `malloc` 实现。 如果希望静态链接,则可以直接将目标文件嵌入到最终二进制文件中: ```bash gcc your_program.c dlmalloc.o -o your_program ``` --- #### `dlmalloc` 的实现原理 ##### 1. 堆结构划分 `dlmalloc` 将可用堆划分为若干不连续的小区域(称为 chunks),并通过链表维护未使用的 chunk 列表。这种设计允许更细粒度地控制内存分配,从而减少碎片化。 ##### 2. 自动调整策略 当请求较大内存块时,`dlmalloc` 可能会选择直接向操作系统申请新页面;而对于较小的请求,则优先从现有的自由列表中查找匹配项。这种方式能够显著提高效率[^3]。 ##### 3. 多线程支持 现代版本的 `dlmalloc` 已经加入了多线程优化机制,在高并发场景下表现出色。具体来说,它引入了锁保护以及独立的 per-thread cache 来降低竞争开销。 --- #### 性能对比与其他实现的关系 尽管 `dlmalloc` 曾一度成为许多项目的首选方案之一,但它并非唯一的选择。例如,Glibc 默认采用的是 ptmalloc[^2] ,而 jemalloc 和 tcmalloc 等其他第三方库也在特定领域展现了更强的优势。不过对于某些轻量级应用而言,`dlmalloc` 依然具备足够的竞争力。 值得注意的是,随着硬件架构的发展和技术需求的变化,新的 allocator 不断涌现 (如 scudo) 。开发者应根据实际环境权衡选用最适合自己的解决方案。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值