memory - 是否有可能在 Rust 中导致内存泄漏?

标签 memory memory-leaks rust

在 Rust 中有什么方法可以导致内存泄漏吗?我知道即使在像 JavaScript 这样的垃圾收集语言中,也存在内存泄漏的边缘情况,在 Rust 中有这样的情况吗?

最佳答案

是的,在 Rust 中泄漏内存就像调用 std::mem::forget 一样简单功能。

如果创建 shared references 的循环,也可能会泄漏内存:

A cycle between Rc pointers will never be deallocated. For this reason, Weak is used to break cycles. For example, a tree could have strong Rc pointers from parent nodes to children, and Weak pointers from children back to their parents.

您还可以使用 Box::leak创建静态引用,或 Box::into_rawFFI情况。


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


所有这些例子都表明内存泄漏不会违反 Rust 保证的内存安全。但是,可以安全地假设在 Rust 中,您没有任何内存泄漏,除非您做了非常具体的事情。

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

关于memory - 是否有可能在 Rust 中导致内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55553048/

相关文章:

oop - 有没有办法将 Trait 实现和防御拆分到不同的模块中?

ios - 如何减小 iOS 中滤镜图像的大小

java - 当我将 int 数组更改为 char 数组时,为什么我的 .class 文件更大?

C++ vector 新删除

ios - Cocos2D/iOS7 : continuously increasing memory usage for boilerplate code

opengl - GLFW-RS 只显示黑色方 block 而不是旋转立方体

java - 高效的图像调整大小

c++ - 访问未分配的内存 C++

Python C API : Assigning PyObjects to a dictionary causes memory leak

rust - Rust 编译器如何知道一个值是否被移动了?