英語版
このページの英語版を見る
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; - 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-2025 by the D Language Foundation
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
サイト全体のドキュメントのdmdのバージョン: 2.109.1
最新のdmdのバージョン: 2.111.0 ダウンロード
翻訳日付:
HTML生成日時:
編集者: dokutoku