我知道Rust没有垃圾回收器,并且想知道当绑定超出作用域时内存是如何释放的。
所以在这个例子中,我知道当a
超出作用域时,Rust会回收分配给它的内存。
{
let a = 4
}
我遇到的问题首先是它如何发生的,其次这不是一种垃圾回收吗?它与typical
垃圾回收有什么不同?
我知道Rust没有垃圾回收器,并且想知道当绑定超出作用域时内存是如何释放的。
所以在这个例子中,我知道当a
超出作用域时,Rust会回收分配给它的内存。
{
let a = 4
}
我遇到的问题首先是它如何发生的,其次这不是一种垃圾回收吗?它与typical
垃圾回收有什么不同?
new()
函数,它们只是静态函数,特别是像 let x = MyStruct::new()
这样的语句会在堆栈上创建对象。真正的堆分配指示器是 Box::new()
(或任何依赖于 Box 的结构)。 - Mario Carneirofn main() {
let s: String = "Hello, World!".into();
let t = s;
println!("{}", s);
}
产生:
<anon>:4:24: 4:25 error: use of moved value: `s` [E0382]
<anon>:4 println!("{}", s);
<anon>:3:13: 3:14 note: `s` moved here because it has type `collections::string::String`, which is moved by default
<anon>:3 let t = s;
^
Rc
/Arc
所做的。 - IInspectable
Rc<T>
和Arc<T>
(或者Box<T>
)所做的事情。它们既不是外部的,也不会停止执行,因为它们没有必要这样做。如果它们这样做,观察到的结果将是相同的,我想知道你是否认为只有当垃圾回收器比必要的代价更高时,它才能被称为“垃圾回收器”。 - undefined