英語版
このページの英語版を見る

std.experimental.allocator.building_blocks.fallback_allocator

struct FallbackAllocator(Primary, Fallback);
FallbackAllocatorは代数における "or"演算子に相当する。 代数に相当する。アロケーション要求はまずPrimary アロケータで試行される。それがnull を返した場合、リクエストはFallback アロケータに転送される。他のすべてのリクエストは、2つのアロケータのどちらかに適切にディスパッチされる。 に適切にディスパッチされる。
動作させるためには FallbackAllocatorPrimary メソッドを定義する必要がある。 owns メソッドが定義されている必要がある。これは、与えられた割り当てをどのアロケータが担当したかを決定するために必要である。 を決定するために必要である。
FallbackAllocatorこれは、ある割り当てをどのアロケータが担当したかを判断するために必要である。 汎用アロケータでバックアップされている。以下の例では、スタック領域を でバックアップしている。 GCAllocatorによってバックアップされている。
Primary primary;
プライマリアロケータ。
Fallback fallback;
フォールバック・アロケータ。
static FallbackAllocator instance;
PrimaryFallback の両方がステートレスである、FallbackAllocator という静的インスタンスを定義する。 instance.
enum uint alignment;
提供されるアライメントは2つのアロケータのアライメントの最小値である。
void[] allocate(size_t s);
最初にプライマリアロケータを試してメモリを割り当てる。 null を返した場合、フォールバックアロケータが試される。
void[] alignedAllocate(size_t s, uint a);
FallbackAllocator オファー alignedAllocateアロケータの少なくとも1つが アロケータもそれを提供する。どちらか、あるいは両方を使って割り当てを試みる。
bool expand(ref void[] b, size_t delta);
expandアロケータが定義されている。 を定義する。 expand.これは次のように動作する。もし primary.owns(b)であれば に転送される。 primary.expandに転送される。 (false)を返す。もしprimarybに転送される。 に転送される。 fallback.expandに転送される。 false(を返す)。
bool reallocate(ref void[] b, size_t newSize);
reallocateは以下のように動作する。もし primary.owns(b)の場合、 primary.reallocate(b, newSize) が試行される。失敗した場合 primary からfallback にアロケーションを移動する。
primarybを所有していない場合、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に転送される、 に転送される。もしprimarybを所有していなければ に転送される。 fallback.deallocateに転送される。 に転送される。
Ternary empty();
emptyが定義されている場合、両方のアロケータもそれを定義する。
Returns:
primary.empty & fallback.empty
FallbackAllocator!(Primary, Fallback) fallbackAllocator(Primary, Fallback)(auto ref Primary p, auto ref Fallback f);
型推論を使用して、適切な 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