2010年3月30日

Delphiのメモリマネージャ

Delphiのメモリマネージャには大きく分けて
  • Delphi 2.0-2005の標準メモリマネージャ
  • Delphi 2006以降の標準メモリマネージャ
  • カスタムメモリマネージャ
があります(Win16は気にしないってことで)。Delphi 2.0-2005の標準メモリマネージャはWin32初期の(あまりリソースが潤沢でなかった)環境に合わせて作られており、小さいメモリブロックの割当と解放を繰り返すと空きメモリの断片化が生じたり、パフォーマンスがあまりよくないなどの欠点が指摘されてきました。一方でDelphiのRTLではメモリマネージャの置き換え(カスタムメモリマネージャ)が当初(Delphi 2.0)から考慮されており、このメカニズムを利用してこれらの問題点を改善しようというオープンソースプロジェクトがFastMMです。Delphi 2006(C++Builder 2010)ではこの成果を取り入れて新しい(FastMMベースの)メモリマネージャが採用されました。Delphi 2006(C++Builder 2010)以降でも依然としてFastMMは使用可能で、標準の新しいメモリマネージャでは省略されている詳細レポート機能などを使用することでメモリリークの発生状況をより詳細に報告させることができます。またカスタムメモリマネージャとしてはFastMMの他に中村さんのNkMM(DHGLに付属)などもあります。NkMMの詳細については

Delphi Graphic Secrets Know-how & Libraries (amazon)/中村拓男著/ソフトバンククリエイティブ(ソフトバンク パブリッシング)/ISBM978-4797319224 (ISBN4-7973-1922-4)/3,129円

のp.202-204のNOTE"Delphiのメモリ管理の大きな問題点"を参照してください(Delphi Graphic Secretsは復刊ドットコムで2010/03/30現在41票となっています)。

FastMMやDelphi 2006以降の標準メモリマネージャについては以下のURLが参考になります。

Borland Developer Studio 2006の新しいメモリマネージャ - by Pierre le Riche
Delphiアプリケーションのメモリリーク検出法
某所 - 新しいメモリマネージャの仕組み
FastMMの導入

またDelphi 2.0の標準メモリマネージャについては

Inside Delphi (amazon)/Ray Lischner著/光田秀訳/アスキー/ISBN978-4756119513 (ISBN4-7561-1951-4)/9,240円

の"第19章 ヒープの秘密"に詳細な解説があります。

0 件のコメント: