
フリーリスト(またはフリーリスト)は、動的メモリ割り当て方式で使用されるデータ構造です。未割り当てのメモリ領域をリンクリストで連結し、各未割り当て領域の最初のワードを次の未割り当て領域へのポインタとして使用することで動作します。すべてのオブジェクトが同じサイズである メモリプールからの割り当てに最適です。
フリーリストは、割り当てと解放の操作を非常にシンプルにします。領域を解放するには、その領域をフリーリストにリンクするだけです。領域を割り当てるには、フリーリストの末尾から1つの領域を削除して使用するだけです。領域のサイズが可変である場合、十分な大きさの領域を探す必要があり、コストが高くなる可能性があります。
フリーリストには、リンクリストから受け継がれた欠点があり、参照の局所性が低いためデータキャッシュの利用率が低く、バディアロケーションシステムとは異なり、隣接する領域を自動的に統合して大きな領域への割り当て要求を満たすことはありません。しかしながら、本格的なメモリアロケータが不要であったり、オーバーヘッドが大きすぎるような、さまざまな単純なアプリケーションでは、 フリーリストは依然として有用です。
OCamlランタイムは割り当て要求を満たすためにフリーリストを使用します[ 1 ]。AndroidランタイムのRosAllocも同様です[ 2 ] 。
参照
参考文献
- ^ Minsky, Yaron; Madhavapeddy, Anil (2022年10月). 「ガベージコレクターを理解する」 . Real World OCaml (第2版). Cambridge University Press . 2022年11月8日閲覧。
- ^ 「ARTガベージコレクションのデバッグ」 . source.android.com . 2023年2月16日時点のオリジナルよりアーカイブ。 2023年2月16日閲覧。