#2
by Bull » 5年前
まあ OS によるかもしれませんが、システム全体でのメモリリークはないと思っても良いです。
Windows や Unix系(Linux、Max OS を含む)では、プロセスが終了したらメモリは解放されますので、明示的に解放しないまま終了しても大丈夫です。
細かいこと言い出すと Windows で例えば、クリップボードに大きなデータをコピーしたままプログラムを終了してもそのまま残っているとかはありますが、ローカルヒープ(malloc などで確保したエリア)に関してはプロセスが終了すれば解放されますので、余り気にする必要はないです。
当然なことながらプロセスが終了しない限りはメモリが自動的に解放されることはないので、プロセス単位のメモリリークは注意しないといけないです。小さなテストプログラムならば問題ないことが多いですが、大きなプログラムで長時間稼働するものは気をつけないといけません。
メモリリークは見つけづらいバグの一つですので、動的に確保したものは(プログラムが終了するときも)必ず解放するようにした方が良いかもしれません。
まあ OS によるかもしれませんが、システム全体でのメモリリークはないと思っても良いです。
Windows や Unix系(Linux、Max OS を含む)では、プロセスが終了したらメモリは解放されますので、明示的に解放しないまま終了しても大丈夫です。
細かいこと言い出すと Windows で例えば、クリップボードに大きなデータをコピーしたままプログラムを終了してもそのまま残っているとかはありますが、ローカルヒープ(malloc などで確保したエリア)に関してはプロセスが終了すれば解放されますので、余り気にする必要はないです。
当然なことながらプロセスが終了しない限りはメモリが自動的に解放されることはないので、プロセス単位のメモリリークは注意しないといけないです。小さなテストプログラムならば問題ないことが多いですが、大きなプログラムで長時間稼働するものは気をつけないといけません。
メモリリークは見つけづらいバグの一つですので、動的に確保したものは(プログラムが終了するときも)必ず解放するようにした方が良いかもしれません。