gpt4 book ai didi

pointers - Rust 的 Arc 和 Rc 类型与垃圾收集有何不同?

转载 作者:行者123 更新时间:2023-11-29 07:49:02 24 4
gpt4 key购买 nike

The Rust Programming Language, first edition说 Rust 没有垃圾收集器:

It maintains these goals without having a garbage collector

然而,在discussing choosing your guarantees它还说:

Rc<T> is a reference counted pointer. In other words, this lets us have multiple "owning" pointers to the same data, and the data will be dropped (destructors will be run) when all pointers are out of scope.

据我所知,这正是指针在像 Python 这样的垃圾收集语言中的工作方式。

我认为垃圾收集是任何不需要手动释放动态分配内存的过程。然而,我想我不明白 Rust 指南认为什么是垃圾收集。

最佳答案

I consider garbage collection to be any process which prevents the need for manual deallocation of dynamically-allocated memory

那么 Rust 确实有“垃圾回收”!

fn make_stuff() {
// Allocate memory on the heap and store `true` in it
let thing = Box::new(true);
// Allocate memory on the heap and store 1000 numbers in it.
let things = vec![42; 1000];
} // Look Ma! No manual deallocation!

thingthings 超出范围时(在本例中,在方法的末尾),它们分配的内存将为您释放。

RcArc 允许比这更灵活;你应该给 their docs阅读了解更多。


除了@Manishearth 的回答,还有这个细节(强调我的):

automatically freed at the end of its last owner's lifetime

在许多垃圾收集语言中,垃圾收集与您的其余代码带外发生。在 Rust 中,释放的位置是已知的。

鉴于此 Java:

public static ArrayList alpha()
{
return new ArrayList();
}

public static void beta()
{
alpha(); // Unused result
}

我不相信您可以肯定地说 ArrayList 何时会从内存中删除。在等效的 Rust 代码中,您知道 ArcRc 一旦超出范围就会被销毁。

关于pointers - Rust 的 Arc 和 Rc 类型与垃圾收集有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27662120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com