Ubuntuは、プログラムの終了時にCプログラムによって割り当てられたメモリを自動的に解放しますか?


11

malloc()関数を使用してメモリを割り当てるコードを含むCプログラムを作成しました。free()関数を使用してメモリを解放しない場合、Ubuntuは自動的にメモリを解放しますか?


カーネルの責任であるUbuntuとは関係ありません。
ユーザー

@user:Ubuntuの特定のバージョンは、Linuxカーネルのいずれかのバージョン上で実行する必要があります。そのため、Ubuntuで実行しているカーネルがメモリを自動的に解放するかどうかを知るために、Ubuntuと関係があります。
-ashubuntu

回答:


16

はい。

カーネルは、プログラムの終了時にプログラムによって割り当てられたすべてのリソースを解放します。

これは、でdo_exit()定義された関数のkernel/exit.c実行が終了した後に行われます。do_exit()機能の実行自体はイベントの数によってトリガーされる可能性があります、最も一般的に明示することによりexit()その通常の計算中または暗黙的なことでプログラムによって呼び出されたシステムコールexit()Cコンパイラは置くとして、その終了時にプログラムによって呼び出されたシステムコール(exit()システムコールが後にmain()S」リターン)。他の理由には、処理できない/無視できない信号または例外の受信が含まれます。

do_exit()関数自体はタスクの数を行います。実行が終了すると、プログラムによって割り当てられたリソースがカーネルによって解放され、さらに使用するためにシステムに返されます。

ソース


7
しかし、それはもちろんfree()を「忘れる」ための言い訳ではありません...
ハーゲンフォンアイゼン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.