こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

メモリを解放しないとどうなる?

趣味でプログラムの勉強をしています。
初歩的な質問になると思いますが、よろしくお願いします。

C言語やC++言語のように、動的に確保したメモリを使用後に意識して解放しないといけない言語で、解放の処理をしないままプログラム(アプリケーション)を終了した場合にはシステム(OS?)的にはどのような状態になるのでしょうか?

例:
・malloc して free しない
・new して delete しない

確保されたメモリ領域がそのまま残り、システムとして使用できるメモリ量が減る(解放にはPCの再起動が必要)のでしょうか?
それともアプリケーションの終了時に自動的に解放されるのでしょうか?


Windowsの場合を想定してご回答いただだけると嬉しいです。

投稿日時 - 2011-05-21 06:32:11

QNo.6752243

暇なときに回答ください

質問者が選んだベストアンサー

#1さんの回答の通りです。
プロセスが終了すると、使用していた資源は
解放されます。ファイルも閉じられます。
mallocを無限に繰り返すプログラムを作り、
これを実行します。タスクマネージャで見ると、
ページファイル使用のラインが上がりっぱなしに
なりますが、プロセスを強制終了させると、元の
レベルに下がるのが観測できます。

投稿日時 - 2011-05-21 08:21:26

お礼

確認方法も含めてご回答ありがとうございました。
実際に試してみたところ、ご教示いただきましたとおりPF使用量が増加し続け、アプリケーションの強制終了で元に戻ることが確認できました。

投稿日時 - 2011-05-21 08:56:50

ANo.4

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

メモリー領域は解放されないままです。このためメモリーリークという障害をもたらします。
図にすると、下の■のようにメモリーを分断して未解放領域が残ると、連続した□ブロックは本来最大8プロック得られるはずが、それより少なくなってしまいます。

□□□□■□□□

投稿日時 - 2011-05-21 07:42:33

お礼

ご回答ありがとうございました。
アプリケーションを終了すると取得したメモリ領域は開放されるようです。

投稿日時 - 2011-05-21 08:59:57

ANo.2

>・malloc して free しない

例えば、

p = malloc(123); // 123は適当な値
/* 何かの処理 */
p = malloc(456); // 456は適当な値

なんて書いちゃうと、1回目のmallocで確保した123バイトの領域が
宙に浮いてしまいます(メモリーリーク)。
プログラムの終了とともにその123バイトを適切に開放してくれるかどうか、
私にはわかりません。

投稿日時 - 2011-05-21 07:26:27

お礼

ご回答ありがとうございました。
アプリケーションの終了で自動開放されることが確認できました。

投稿日時 - 2011-05-21 08:58:44

ANo.1

プログラム終了で自動解放されます。
実際にプログラムを作成して試せばすぐに分かります。

投稿日時 - 2011-05-21 07:11:07

お礼

ご回答ありがとうございました。
仰られるとおりアプリケーションの終了で自動開放されることが確認できました。

投稿日時 - 2011-05-21 08:57:58

あなたにオススメの質問