ベストエフォートメモリ管理
今の時代、特別な性能要求がなければ、メモリ管理機構を備えた処理系を選択するのが当然だと思いますが、諸般の理由から、特別な性能要求がないにもかかわらず、CやDelphiといったメモリ管理機構を備えていない処理系を使わなければいけないことがあります。
そんなときのための、メモリ管理基本方針。
前提
- メモリは普通に潤沢にある(通常のPC以上を想定)
- 1つのタスクが完了したら終了する(デーモンプロセスのように、長期間走りつづけることはない)
方針
解放しても問題なさそうなところだけ、解放する
備考
- 解放漏れがあった場合には、プロセスの終了時に解放されるので気にしない。
- メモリリークより、アクセス違反の方がうっとおしい。
- 知的なデータ構造を作ろうとしたとき、メモリ管理が面倒であきらめるのはもったいない。
プログラムの規模がそれなりに大きくなってきて、それはいくらなんでもあんまりだというケースでは、別な方針もあります。
- プログラムを、メモリ管理単位で分割(=モジュールと呼ぶことにする)
- モジュールを使う際にはモジュールの初期化を行い、モジュールが不要になったらモジュールの廃棄を行う。
- モジュール内で使うオブジェクトは、全て1つの構造体に登録し、解放処理は明示的に記述しない
- モジュールの廃棄の際に、構造体に登録されたオブジェクトをすべて解放
ベストエフォートメモリ管理と組み合わせることで、それなりにそれなりなメモリ管理になりそうな予感。