英語版
このページの英語版を見る
std.experimental.allocator.building_blocks.fallback_allocator
- struct
FallbackAllocator
(Primary, Fallback); FallbackAllocator
は代数における "or"演算子に相当する。 代数に相当する。アロケーション要求はまずPrimary アロケータで試行される。それがnull を返した場合、リクエストはFallback アロケータに転送される。他のすべてのリクエストは、2つのアロケータのどちらかに適切にディスパッチされる。 に適切にディスパッチされる。動作させるためにはFallbackAllocator
Primary メソッドを定義する必要がある。 owns メソッドが定義されている必要がある。これは、与えられた割り当てをどのアロケータが担当したかを決定するために必要である。 を決定するために必要である。FallbackAllocator
これは、ある割り当てをどのアロケータが担当したかを判断するために必要である。 汎用アロケータでバックアップされている。以下の例では、スタック領域を でバックアップしている。 GCAllocatorによってバックアップされている。- Primary
primary
; - プライマリアロケータ。
- Fallback
fallback
; - フォールバック・アロケータ。
- static FallbackAllocator
instance
; - Primary とFallback の両方がステートレスである、FallbackAllocator という静的インスタンスを定義する。
instance
. - enum uint
alignment
; - 提供されるアライメントは2つのアロケータのアライメントの最小値である。
- void[]
allocate
(size_ts
); - 最初にプライマリアロケータを試してメモリを割り当てる。 null を返した場合、フォールバックアロケータが試される。
- void[]
alignedAllocate
(size_ts
, uinta
); - FallbackAllocator オファー
alignedAllocate
アロケータの少なくとも1つが アロケータもそれを提供する。どちらか、あるいは両方を使って割り当てを試みる。 - bool
expand
(ref void[]b
, size_tdelta
); expand
アロケータが定義されている。 を定義する。expand
.これは次のように動作する。もし primary.owns(b
)であれば に転送される。 primary.expand
に転送される。 (false)を返す。もしprimary がb
に転送される。 に転送される。 fallback.expand
に転送される。 false(を返す)。- bool
reallocate
(ref void[]b
, size_tnewSize
); reallocate
は以下のように動作する。もし primary.owns(b
)の場合、 primary.reallocate(b, newSize) が試行される。失敗した場合 primary からfallback にアロケーションを移動する。primary 。b
を所有していない場合、fallback.reallocate(b, newSize) が試行される。これが失敗した場合、割り当てを から に移動する試みが行われる。 のアロケーションをfallback からprimary に移動しようとする。- Ternary
owns
(void[]b
); owns
が定義されている場合、および両方のアロケータがowns
. primary.owns(b) | fallback.owns(b) を返す。- Ternary
resolveInternalPointer
(const void*p
, ref void[]result
); resolveInternalPointer
が定義されている場合、および両方のアロケータが が定義している場合にのみ定義される。- bool
deallocate
(void[]b
); deallocate
が定義されているのは、少なくとも一方のアロケータが 定義されているdeallocate
.これは次のように機能する。もし primary.owns(b
), に転送される。 primary.deallocate
に転送される、 に転送される。もしprimary がb
を所有していなければ に転送される。 fallback.deallocate
に転送される。 に転送される。- Ternary
empty
(); empty
が定義されている場合、両方のアロケータもそれを定義する。Returns:primary.empty & fallback.empty
- FallbackAllocator!(Primary, Fallback)
fallbackAllocator
(Primary, Fallback)(auto ref Primaryp
, auto ref Fallbackf
); - 型推論を使用して、適切な FallbackAllocator インスタンスを返す。を持たないアロケータで初期化するには、そのアロケータの staticメンバを使う。 を持たないアロケータで初期化するには、それらのit staticメンバを使う。Examples:
import std.experimental.allocator.building_blocks.region : Region; import std.experimental.allocator.gc_allocator : GCAllocator; import std.typecons : Ternary; auto a = fallbackAllocator(Region!GCAllocator(1024), GCAllocator.instance); auto b1 = a.allocate(1020); writeln(b1.length); // 1020 writeln(a.primary.owns(b1)); // Ternary.yes auto b2 = a.allocate(10); writeln(b2.length); // 10 writeln(a.primary.owns(b2)); // Ternary.no
Copyright © 1999-2024 by the D Language Foundation
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku