是否有可能导致Rust发生内存泄漏?

时间:2019-04-06 20:10:21

标签: memory memory-leaks rust

有什么办法导致Rust内存泄漏?我知道即使在JavaScript之类的垃圾收集语言中,也有可能发生内存泄漏的极端情况,Rust中有这种情况吗?

2 个答案:

答案 0 :(得分:7)

是的,Rust中的内存泄漏与调用std::mem::forget函数一样容易。

如果您创建shared references周期,也可能会泄漏内存:

  

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

您必须注意,内存泄漏不会破坏Rust保证的内存安全性。但是,可以肯定地认为,在Rust中,除非您做的是“非常特殊的”操作,否则不会发生任何内存泄漏。

答案 1 :(得分:1)

book

  

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

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