フリーリスト

フリーリスト (free listまたはfreelist) は動的メモリ確保のスキームで使用されるデータ構造。

解説

各未割り当て領域の最初のワードを次の未割り当て領域へのポインタとして使用することによって、連結リストでメモリの未割り当て領域同士の結合を操作する。すべてのオブジェクトが同じサイズであるメモリプールからの割り当てに最適。

フリーリストを使用すると、割り当てと解放の操作が非常に簡単になる。領域を解放するには、その領域をフリーリストにリンクするだけ。領域を割り当てるには、空きリストの末尾から単一の領域を削除して使用するだけ。領域のサイズが可変である場合、十分なサイズの領域を検索する必要があり、コストがかかる可能性がある。

フリーリストには (連結リストから継承された) 欠点があり、参照の局所性が低いためデータキャッシュの使用率が低くく、またバディ・アロケーション・システム(英語版)とは異なり、大規模な領域の割り当て要求を満たすために隣接する領域を自動的に統合することをしない。にもかかわらず、これらは本格的なメモリ・アロケータが不要であるか、過剰なオーバーヘッドを必要とするさまざまな単純なアプリケーションで依然として役立つ。

OCamlランタイムは、AndroidランタイムのRosAllocと同様に[1]、割り当てリクエストを満たすためにフリーリストを使用する[2]

脚注

  1. ^ “Debugging ART garbage collection”. source.android.com. 16 Feb 2023時点のオリジナルよりアーカイブ。16 Feb 2023閲覧。
  2. ^ Minsky, Yaron; Madhavapeddy, Anil (October 2022). “Understanding the Garbage Collector”. Real World OCaml (2nd ed.). Cambridge University Press. https://dev.realworldocaml.org/garbage-collector.html 8 November 2022閲覧。 

参考文献

  • The Memory Management Glossary
  • Memory Allocation Lecture Slides (ppt)

関連項目

  • バディ・メモリ・アロケーション(英語版)
  • mimalloc
  • 表示
  • 編集