
趣味でプログラムの勉強をしています。
初歩的な質問になると思いますが、よろしくお願いします。
C言語やC++言語のように、動的に確保したメモリを使用後に意識して解放しないといけない言語で、解放の処理をしないままプログラム(アプリケーション)を終了した場合にはシステム(OS?)的にはどのような状態になるのでしょうか?
例:
・malloc して free しない
・new して delete しない
確保されたメモリ領域がそのまま残り、システムとして使用できるメモリ量が減る(解放にはPCの再起動が必要)のでしょうか?
それともアプリケーションの終了時に自動的に解放されるのでしょうか?
Windowsの場合を想定してご回答いただだけると嬉しいです。
No.4ベストアンサー
- 回答日時:
#1さんの回答の通りです。
プロセスが終了すると、使用していた資源は
解放されます。ファイルも閉じられます。
mallocを無限に繰り返すプログラムを作り、
これを実行します。タスクマネージャで見ると、
ページファイル使用のラインが上がりっぱなしに
なりますが、プロセスを強制終了させると、元の
レベルに下がるのが観測できます。
確認方法も含めてご回答ありがとうございました。
実際に試してみたところ、ご教示いただきましたとおりPF使用量が増加し続け、アプリケーションの強制終了で元に戻ることが確認できました。
No.3
- 回答日時:
メモリー領域は解放されないままです。
このためメモリーリークという障害をもたらします。図にすると、下の■のようにメモリーを分断して未解放領域が残ると、連続した□ブロックは本来最大8プロック得られるはずが、それより少なくなってしまいます。
□□□□■□□□
No.2
- 回答日時:
>・malloc して free しない
例えば、
p = malloc(123); // 123は適当な値
/* 何かの処理 */
p = malloc(456); // 456は適当な値
なんて書いちゃうと、1回目のmallocで確保した123バイトの領域が
宙に浮いてしまいます(メモリーリーク)。
プログラムの終了とともにその123バイトを適切に開放してくれるかどうか、
私にはわかりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メモリが不足しています(VBA)
-
C言語で、メモリを解放しないで...
-
メモリのセグメント違反の解決...
-
メモリ不足
-
VBAの配列サイズとメモリに関して
-
EXCEL-VBAにてADOのレコードセ...
-
計算速度が遅い
-
VB.netでUSBメモリの固有I...
-
malloc関数の使い終わった後の...
-
メモリーリークエラーが起こる
-
こんなメッセージがでます
-
大容量のメモリ確保をスワップ...
-
C#で別クラスインスタンスのメ...
-
「memcpy」と「strcpy」について
-
DXライブラリについて
-
VB2005 Datagridview の仮想モ...
-
「ヒープサイズの設定」て何?
-
プログラム領域の算出方法
-
ルネサスマイコン(R8C) ビルド...
-
ExitProcessの関数コールについ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語で、メモリを解放しないで...
-
Access Violationについて
-
VBAの配列サイズとメモリに関して
-
メモリのセグメント違反の解決...
-
メモリが不足しています(VBA)
-
メモリ不足
-
大容量のメモリ確保をスワップ...
-
ファイルマッピング関数で失敗
-
PC-98で拡張メモリを使え...
-
エラーについて
-
「ヒープサイズの設定」て何?
-
エクセルのメモリ使用状況/Appl...
-
C言語における再帰呼び出しの...
-
オフスクリーンサーフェスへの...
-
1ページに収まるオブジェクト...
-
新規購入PCのスペックについて...
-
4GB搭載したマシンのメモリ情...
-
組み込み系でのmallocについて
-
ルネサスマイコン(R8C) ビルド...
-
Visual Basic Net2003
おすすめ情報