割り当てられたすべてのポインターを解放する必要があることは、すべて教えられています。ただし、メモリを解放しない場合の実際のコストについては、少し興味があります。がループ内またはスレッド実行の一部で呼び出された場合など、いくつかの明白なケースでmalloc()
は、メモリ リークが発生しないように解放することが非常に重要です。ただし、次の 2 つの例を考えてみましょう。
まず、次のようなコードがあるとします。
int main()
{
char *a = malloc(1024);
/* Do some arbitrary stuff with 'a' (no alloc functions) */
return 0;
}
ここでの本当の結果は何ですか?私の考えでは、プロセスが停止し、とにかくヒープ領域がなくなるので、への呼び出しを逃しても害はありませんfree
(ただし、閉鎖、保守性、および優れた実践のためにとにかくそれを持つことの重要性を認識しています)。私はこの考えで正しいですか?
次に、シェルのように動作するプログラムがあるとします。ユーザーは次のような変数を宣言できaaa = 123
、それらは後で使用するために動的データ構造に格納されます。明らかに、*alloc 関数 (ハッシュマップ、リンク リストなど) を呼び出すソリューションを使用することは明らかです。この種のプログラムの場合、malloc
これらの変数はプログラムの実行中に常に存在する必要があり、静的に割り当てられたスペースでこれを実装する良い方法 (私が見ることができる) がないため、呼び出し後に解放することは意味がありません。割り当てられているが、プロセス終了の一部としてのみ解放されるメモリの束を持つのは悪い設計ですか? もしそうなら、代替手段は何ですか?