1. ホーム
  2. memory

[解決済み】Rustでメモリリークを起こすことは可能か?

2022-02-22 16:28:59

質問

Rustでメモリリークを起こす方法はあるのでしょうか?JavaScriptのようなガベージコレクション型言語でもメモリリークするエッジケースがあることは知っていますが、Rustでもそのようなケースはあるのでしょうか?

解決方法は?

そうです、Rust ではメモリのリークは std::mem::forget 関数を使用します。

のサイクルを作成すると、メモリリークすることもあります。 共有リファレンス :

の間のサイクル Rc のポインタが解放されることはありません。このため Weak は、サイクルを中断するために使用されます。例えば、ツリーには強い Rc 親ノードから子ノードへのポインタ、および Weak 子から親に戻るポインタ。

を使用することもできます。 Box::leak を使用して静的な参照を作成するか Box::into_raw の中に FFI のような状況になります。


実は、システムプログラミング言語では 必要 そうでなければ、たとえば FFI の場合、リソースは他の言語で使用するために送信された後に解放されます。


これらの例はすべて、メモリリークがあってもRustが保証するメモリ安全性を損なわないことを示しています。しかし、Rustでは、よほど特殊なことをしない限り、メモリリークを起こさないと考えてよいでしょう。

また、メモリリークの定義を緩くすると、例えば未使用のデータを解放せずにコンテナ内にデータを追加するなど、メモリリークを発生させる方法は無限にあることに注意しましょう。