1 个不稳定版本
0.1.0 | 2018年12月19日 |
---|
#39 在 #垃圾
21KB
331 行
使用 Rc/Weak 的垃圾收集器
这个包实现了一个相当简单的垃圾收集器。它的卖点在于它完全不使用任何 unsafe
:相反,它将对象之间的引用表示为 Weak
指针,这些指针在访问时升级为 Rc
。
GC 持有其堆上每个对象的 Rc
,并可以分配充当根的进一步 Rc
。然后它可以定位根对象并执行跟踪垃圾收集来释放没有传入引用的对象(即使在存在循环的情况下)。它还使用底层引用计数器作为更快地定位垃圾对象的方法:如果一个对象具有 0 个弱引用计数和 1 个强引用计数,它只能通过 GC 的 Rc
本身访问,而不是通过任何对象引用,并且可以立即释放,而不必执行跟踪阶段。
如果 GC 中存在错误,并且一个对象在仍然可访问时被收集,则访问该对象的任何操作都将无法升级 Weak
指针,并引发恐慌,而不是成为不安全的使用后释放。
请参阅 变更日志,以查看最新版本中的更改。
用法
首先在您的 Cargo.toml
中添加一个条目
[dependencies]
rcgc = "0.1.0"
然后导入该包到您的 Rust 代码中
extern crate rcgc;
依赖项
~87KB