有什么办法导致Rust内存泄漏?我知道即使在JavaScript之类的垃圾收集语言中,也有可能发生内存泄漏的极端情况,Rust中有这种情况吗?
答案 0 :(得分:7)
是的,Rust中的内存泄漏与调用std::mem::forget
函数一样容易。
如果您创建shared references周期,也可能会泄漏内存:
Rc
指针之间的循环永远不会被释放。因此,Weak
用于中断循环。例如,一棵树可以具有从父节点到子节点的强Rc
指针,以及从子节点到其父节点的Weak
指针。
您必须注意,内存泄漏不会破坏Rust保证的内存安全性。但是,可以肯定地认为,在Rust中,除非您做的是“非常特殊的”操作,否则不会发生任何内存泄漏。
答案 1 :(得分:1)
从book
锈迹斑斑的内存安全保证使意外创建从未清除过的内存变得困难,但并非不可能(称为内存泄漏)。完全禁止内存泄漏并不是Rust的保证之一,就像在编译时禁止数据竞争一样,这意味着内存泄漏在Rust中是内存安全的。
所以答案是肯定的。您的代码中可能会发生内存泄漏,而rust编译器不会抱怨它。