無料リスト

この図は、それぞれポインタとデータブロックを保持する5つの連続したメモリ領域を表しています。リストヘッドは2番目の要素を指し、2番目の要素は5番目の要素を指し、5番目の要素は4番目の要素を指し、これにより利用可能なメモリ領域のリンクリストが形成されます。

フリーリスト(またはフリーリスト)は、動的メモリ割り当て方式で使用されるデータ構造です。未割り当てのメモリ領域をリンクリストで連結し、各未割り当て領域の最初のワードを次の未割り当て領域へのポインタとして使用することで動作します。すべてのオブジェクトが同じサイズである メモリプールからの割り当てに最適です。

フリーリストは、割り当てと解放の操作を非常にシンプルにします。領域を解放するには、その領域をフリーリストにリンクするだけです。領域を割り当てるには、フリーリストの末尾から1つの領域を削除して使用するだけです。領域のサイズが可変である場合、十分な大きさの領域を探す必要があり、コストが高くなる可能性があります。

フリーリストには、リンクリストから受け継がれた欠点があり、参照の局所性が低いためデータキャッシュの利用率が低く、バディアロケーションシステムとは異なり、隣接する領域を自動的に統合して大きな領域への割り当て要求を満たすことはありません。しかしながら、本格的なメモリアロケータが不要であったり、オーバーヘッドが大きすぎるような、さまざまな単純なアプリケーションでは、 フリーリストは依然として有用です。

OCamlランタイム割り当て要求を満たすためにフリーリストを使用します[ 1 ]。AndroidランタイムのRosAllocも同様です[ 2 ] 。

参照

参考文献

  1. ^ Minsky, Yaron; Madhavapeddy, Anil (2022年10月). 「ガベージコレクターを理解する」 . Real World OCaml (第2版). Cambridge University Press . 2022年11月8日閲覧
  2. ^ 「ARTガベージコレクションのデバッグ」 . source.android.com . 2023年2月16日時点のオリジナルよりアーカイブ。 2023年2月16日閲覧

さらに読む