这篇文章主要讨论了 Rust 中的内存分配器相关内容,包括不同类型的分配器、嵌套分配器、传递分配器和作用域分配器等,具体如下:
- 种类的分配(Kinds of allocation):内存可视为连续的字节序列,分配器负责管理这些字节并记录使用情况。有全局分配器管理整个程序的内存,还有基于区域的分配器如 slab 分配器和 bump 分配器等,可更有针对性地处理内存分配。
- 嵌套分配器(Nesting allocators):如 bumpalo crate 的
collections
特性,系统分配器承载 bump 分配器,bump 分配器又承载向量等。但这样会导致使用非标准的Vec
类型,且无法使用其他集合类型。 - 传递分配器(Passing Allocators):通过 nightly 的
allocator_api
特性,为集合类型添加新的分配器泛型参数,以支持自定义分配器。但在与宏和 trait 结合使用时会遇到问题,可能导致类型重复和生态系统不一致。 - 作用域分配器(Scoped Allocators):Tmandry 的能力设计是更优的方向,在签名级别表达能力,无需手动传递分配器,可解决全局分配器的问题,且能解决字符串字面量与自定义分配器的兼容问题。
- 结论(Conclusion):介绍了一般的分配策略和嵌套分配器的问题,以及通过上下文/能力语言特性简化分配的方法。能力设计虽不新,但能减少代码、避免方法重复等,还可能解决
core
/alloc
/std
的分裂问题,且认为能力如分配器是树状结构的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。