メモリリーク
メモリの空き領域が減っていくよ
確保したメモリ領域の解放忘れが原因だよ
簡単に書くよ
メモリリーク(英:memory leak)とは
プログラムさんが「ここは僕が使うよ!」と場所取りしたメモリの場所を「もう使わないから他の人が使っていいよ!」にするのを忘れちゃったのが原因で、他の人が使えない状態が続くことによって、メモリの使える場所が減っていくこと。
もう少し真面目っぽく説明すると
確保したメモリ領域を解放する処理がプログラムに入っていないのが原因で、メモリを確保するけど解放しないのが続くことによって、メモリの空き領域が減っていくこと
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として「メモリ」のあれやこれやについて簡単に説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
今回 登場するメモリは「パソコンさんが作業するときに使う机」です。
パソコンさんは、お仕事道具をメモリの上に広げて、えっちらおっちらと働きます。
プログラムがメモリを使うとき、まずは場所取りをします。
「ここからここまで俺が使うから!他のやつは使うなよ!」と宣言するのです。
考え方は花見の場所取りと同じです。
他のやつが使わないように先に場所を押さえてしまうのです。
この場所取りを専門家の人たちは「メモリ(領域)の確保」などと表現します。
ブルーシートを広げて「ここは俺たちが花見をする場所だ!」と主張するイメージです。
場所取りが終わったら、プログラムさんは、そこを使って作業をします。
そこは自分のために確保した場所です。
邪魔するやつがいないので好き勝手に使います。
作業が終わったら、待っているのは後片付けです。
メモリの上から荷物をどけて「ここはもう使わないから他の人が使っていいよ!」と宣言します。
考え方は花見の後片付けと同じです。
やることをやったら、お片付けをして、他の人が使える状態にしてから帰ります。
それがマナーです。
この後片付けを専門家の人たちは「メモリ(領域)の解放」などと表現します。
広げていたブルーシートを片付けて誰でも使えるようにするイメージです。
以上を踏まえて、本題に入ります。
ズバリ!
確保したメモリ領域の解放忘れが原因でメモリの空き領域が減っていく現象
が「メモリリーク」です。
花見の例でいえば、場所取り用のブルーシートを広げたまま帰っちゃったような状態です。
先ほど、プログラムがメモリを使うときには
1.場所取り
2.使う
3.後片付け
の3つの手順を踏むと書きました。
実は、アホなプログラムは「3.後片付け」をしません。
作った人が「使い終わったら後片付けをしろよ!」な命令を入れ忘れたからです。
そうすると、場所取りしたメモリ領域は、ずっと「使用中」状態です。
いつまで待っても「使用可能」な状態には戻りません。
このようなことが何回も起きたら、どうでしょう。
いずれ、メモリのすべての場所が「使用中」状態になってしまいます。
使えるメモリがなければ、プログラムは何も仕事ができません。
そのうちパソコンさん自体が力尽きるでしょうね。
これがメモリリークです。
後片付け忘れが原因でメモリの使える場所が減っていく現象を指します。
ちなみに、いろんなところでメモリリークの説明を読んでいると「現象だよ」という説明と「バグ(プログラムの欠陥)だよ」という説明を見かけると思います。
こだわり派な人は「現象なの?バグなの?」と疑問を覚えるかもしれませんが、できれば気にしないでください。
メモリリークは
1.メモリの解放処理が入っていないのが原因で
2.確保されたメモリ領域が解放されないことによって
3.メモリの空き領域が減っていく現象
です。
3に注目すれば、メモリリークは「現象」です。
1に注目すれば、メモリリークは「バグ」と言えます。
個人的には「メモリの空き領域が減っていく現象」がメモリリークだと理解しています。
「メモリの解放処理が入っていないバグ」はメモリリークが発生する「原因」です。
とはいえ「メモリの解放処理が入っていないバグ」を意図して「メモリリーク」と言う人がいるのも事実です。
そこら辺は、ゆるく解釈してください。
一言でまとめるよ
まぁ「メモリリーク」って単語が出てきたら「『あっ、メモリを解放するの忘れちゃってるわ』が原因でメモリの空きが減っていくんだな~」と お考えください。
おまけ
■訳してみるよ
「memory(メモリ)」の意味は「記憶」とか「記憶力」とかです。
「leak(リーク)」の意味は「漏る」とか「漏れる」とか「漏洩」とかです。
何となく くっつけると
記憶の漏洩
となります。
■検索してみる?






