英語版
このページの英語版を見る
std.experimental.allocator.building_blocks.free_tree
- struct
FreeTree
(ParentAllocator); - フリー・ツリー・アロケータは、他のアロケータの上にスタック可能で、フリー・リスト・アロケータと似ている。 フリー・リスト・アロケータと似ている。以前に解放されたブロックのシングルリンクリストの代わりに 代わりに、バイナリー・サーチツリーを保持する。これにより これにより、フリーツリーアロケータは任意の長さのブロックを管理し、効率的に検索することができる。 を効率的に行うことができる。一般的な
FreeTree
には以下のようなものがある:- 単純なリージョンなどの)アロケータにdeallocate 機能を追加する。
- 複数の適応可能なフリーリストの利点を得る。 複数の適応可能なフリーリストの利点を得る。 よく使われるサイズに自動的に適応する。
FreeTree
はすべてを解放し、親アロケータを再度試す。 割り当てが解除されると、解除されたブロックは内部で管理されているフリーツリーに挿入される。 に挿入される(親には戻されない)。空きツリーは バランスは保たれない。その代わり、新しく挿入されたブロックはツリーのルートにローテートされるため、先入れ先出しの性質を持つ。 ブロックはツリーのルートにローテーションされるからだ。こうすることで、割り当てがキャッシュ フレンドリーになり、頻繁に使用されるサイズはすぐに見つかる可能性が高くなる、 一方、あまり使用されないサイズはツリーの葉に移動する。FreeTree
は小さなアロケーションを少なくとも4 * size_t.sizeof 、 これは64ビットシステムでは1キャッシュ・ライン・サイズである。非常に小さなオブジェクトを効率的に割り当てる必要がある場合 を効率的に割り当てる必要がある場合FreeTree
を使用する必要がある。 適切なスモール・オブジェクト・アロケータを使用する必要がある。 以下のメソッドは、ParentAllocator が定義している場合に定義され、それにフォワードする:allocateAll expand,owns,reallocate 。- enum uint
alignment
; - FreeTree はワードアラインされている。
- size_t
goodAllocSize
(size_ts
); - parent.goodAllocSize(max(Node.sizeof, s)) を返す。
- void[]
allocate
(size_tn
); - バイトのメモリを割り当てる。
n
バイトのメモリを確保する。最初にフリーツリーを参照し、適切なサイズのブロックが見つかればそこから 適切なサイズのブロックが見つかれば、そこから戻る。そうでない場合は、親アロケータ が試される。親からの割り当てが成功すると、割り当てられたブロックが返される。 が返される。そうでない場合、フリーツリーは別の戦略を試す: ParentAllocator がdeallocate を定義した場合、FreeTree はその内容をすべて解放し、再度試行する。 を定義している場合、その内容をすべて解放して再試行する。TODO ParentAllocator がdeallocate を定義していない場合、分割と合体を実装すべきである。
- bool
deallocate
(void[]b
); - 自由ツリーに
b
を自由木に置く。 - void
clear
(); - ParentAllocator.deallocate が存在する場合に定義される。 フリーツリーに保持されているすべてのメモリをフリーツリーに戻す。
- bool
deallocateAll
(); - が存在する場合に定義される。 ParentAllocator.
deallocateAll
が存在する場合に定義され、それに転送する。 また、フリー・ツリーを無効にする(親がフリー・ツリーで管理されているすべてのメモリを解放すると仮定される)。 を解放すると仮定される)。
Copyright © 1999-2024 by the D Language Foundation
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku