Memory 是否可能导致内存泄漏生锈?

Memory 是否可能导致内存泄漏生锈?,memory,memory-leaks,rust,Memory,Memory Leaks,Rust,是否有任何方法会导致内存泄漏?我知道,即使在像JavaScript这样的垃圾收集语言中,也存在内存泄漏的边缘情况,Rust中是否存在这种情况?是的,在Rust中泄漏内存就像调用函数一样简单 如果创建以下循环,也可能导致内存泄漏: Rc指针之间的循环永远不会被释放。因此,弱用于中断循环。例如,树可以具有从父节点到子节点的强Rc指针,以及从子节点到父节点的弱指针 您还可以使用创建静态引用,或在特定情况下使用 实际上,在系统编程语言中,您需要能够创建内存泄漏,否则,例如在FFI情况下,您的资源在被发

是否有任何方法会导致内存泄漏?我知道,即使在像JavaScript这样的垃圾收集语言中,也存在内存泄漏的边缘情况,Rust中是否存在这种情况?

是的,在Rust中泄漏内存就像调用函数一样简单

如果创建以下循环,也可能导致内存泄漏:

Rc
指针之间的循环永远不会被释放。因此,
用于中断循环。例如,树可以具有从父节点到子节点的强
Rc
指针,以及从子节点到父节点的
指针

您还可以使用创建静态引用,或在特定情况下使用


实际上,在系统编程语言中,您需要能够创建内存泄漏,否则,例如在FFI情况下,您的资源在被发送到另一种语言中使用后将被释放


所有这些示例都表明,内存泄漏不会破坏由锈蚀保证的内存安全。然而,可以安全地假设,在Rust中,您没有任何内存泄漏,除非您做了非常具体的事情

另外,请注意,如果对内存泄漏采用松散的定义,则有无限种创建内存泄漏的方法,例如,在容器中添加一些数据,而不释放未使用的数据。

Rust的内存安全保证使意外创建从未清理过的内存(称为内存泄漏)变得困难,但并非不可能。完全防止内存泄漏并不是Rust的保证之一,正如在编译时禁止数据竞争一样,这意味着内存泄漏在Rust中是内存安全的


所以答案是肯定的。您的代码中可能存在内存泄漏,而rust编译器不会对此抱怨。

您可能已经忘记了这一点,这在ffi情况下传递状态非常常见。好奇的是,一点在线搜索就会发现,“ffi”代表“外部函数接口”。)(对铁锈初学者来说并不明显。)我不会说循环引用和类似的东西“非常奇特”。除非你在做简单的例子,否则很快你可能会遇到类似的异国情调。我想我认为这是一种内存泄漏,因为在我主要使用的垃圾收集语言中,这是你不小心用掉未使用数据的可用内存的唯一方法,由于它基本上与意外保留对智能指针的引用相同,因此“内存泄漏”一词最初的意思是忘记调用
free
,但这实际上只是程序意外耗尽内存的一部分。忘记直接调用
free
和忘记做一些会间接触发调用
free
的事情具有相同的后果我刚才在rust中创建了一个事件侦听器泄漏,在搜索“防止rust中的内存泄漏”的方法时发现了此线程。