英語版
このページの英語版を見る
std.experimental.allocator.building_blocks.affix_allocator
- struct
AffixAllocator(Allocator, Prefix, Suffix = void); - 割り当ての前(Prefix 型)および/または後( 型)に余分なデータを追加するアロケータ。 (型はSuffix)の前後に追加するソースアロケータである。これは これは、追加のアロケーション関連情報が必要な場合に便利である。 これは、ミューテックス、参照カウント、メモリ破壊エラーのデバッグ用のウォールなど、追加のアロケーション関連情報が必要な場合に便利である。Prefix がvoid でない場合、Allocator は少なくとも と同じ大きさのアライメントを保証しなければならない。 Prefix.alignofと同程度のアライメントを保証しなければならない。 接尾辞はアライメントの丸め込みのため、取得に時間がかかる。 が望ましい。しかし、小さな接頭辞はアライメントを鈍らせる。 小さな接頭辞で大きなアライメントが必要な場合は、接尾辞を選ぶべきである。 以下のメソッドは、Allocator で定義されている場合に定義される:deallocateAll empty,owns.Examples:
import std.experimental.allocator.mallocator : Mallocator; // One word before and after each allocation. alias A = AffixAllocator!(Mallocator, size_t, size_t); auto b = A.instance.allocate(11); A.instance.prefix(b) = 0xCAFE_BABE; A.instance.suffix(b) = 0xDEAD_BEEF; assert(A.instance.prefix(b) == 0xCAFE_BABE && A.instance.suffix(b) == 0xDEAD_BEEF);
- enum uint
alignment; - Prefix がvoid の場合、アライメントは親のアライメントとなる。そうでない場合、アライメントはPrefix のアライメントと同じである。
- Allocator
_parent; - 親アロケータAllocator がステートフルな場合、そのインスタンスがメンバとして格納される。 メンバとして格納される。そうでない場合、AffixAllocator は Allocator.instance.いずれの場合も、名前
_parentという名前が使われる。 を使う。 - pure nothrow @nogc @safe Allocator
parent(); - 親アロケータAllocator がステートフルな場合、そのインスタンスがメンバとして格納される。 メンバとして格納される。そうでない場合、AffixAllocator 。 Allocator.instance.どちらの場合でも、_parent という名前が一律に使われる。 という名前で統一される。
- size_t
goodAllocSize(size_t);
void[]allocate(size_t);
Ternaryowns(void[]);
boolexpand(ref void[]b, size_tdelta);
boolreallocate(ref void[]b, size_ts);
booldeallocate(void[]b);
booldeallocateAll();
Ternaryempty(); - 標準のアロケータ・メソッド。それぞれが定義されているのは、親 アロケータが同音異義語のメソッドを定義している場合にのみ定義される。
goodAllocSize, は除く)。また、親アロケータがメソッドを定義している場合は、 shared 。 - static AffixAllocator
instance; - また
instanceシングルトンが定義されるのは、親アロケータが がステートを持たず、独自のit オブジェクトを定義している場合に限り定義される。 - ref auto
prefix(T)(T[]b);
ref autosuffix(T)(T[]b); - への参照を提供するアフィックスアクセス関数である。 ブロック
bへの参照を提供するアフィックスアクセス関数である。bはNULLであってはならない。 対応する接辞がvoid でない場合にのみ定義される。接辞の修飾子は必ずしも引数の修飾子と同じとは限らない。 と同じとは限らない。これは、接辞がデータの一部ではなく、データ自体と関連付けられているだけだからである。 の一部ではなく、データに関連付けられ、アロケータが知っているだけだからである。 アロケータが知っているからである。以下の表は、アロケータのアフィックスの型を示している。 preffix(b)と affix(b)の型によって異なる。b.結果 prefix/suffix引数による (U は 任意の非限定型、Affix はPrefix またはSuffix)引数の型 戻り値 コメント shared(U)[] ref shared Affix データはスレッド間で共有され、アロケータもそれに従う。 immutable(U)[] ref shared Affix データは不変のものであるが、アロケータはその下のメモリが変更可能であることを「知っている」。 そのため、immutable は省略される。 を省略した。しかし、結果は shared というのも、immutable は暗黙のうちに共有可能だからである。 スレッドが同じデータの接辞にアクセスし、操作することができる。 const(shared(U))[] ref shared Affix データは常にスレッド間で共有可能である。たとえデータが がconst の場合と同じ理由で、接辞は変更可能である。 immutable. const(U)[] ref const Affix 入力はU[] 、またはimmutable(U)[] 、 であるため、実際に共有されているかどうかはわからない。修飾されていない接辞 shared を返すと、競合状態が発生する可能性がある。 を返すと、複数のスレッド間で変更可能なスレッドローカルデータを不注意に共有することになる。 を不注意に共有してしまう可能性がある。そのため、返される型は保守的に ref const. U[] ref Affix 非修飾データは非修飾接辞を持つ。 前提条件
b!is nullそしてbは で確保されていなければならない。
Copyright © 1999-2025 by the D Language Foundation
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
サイト全体のドキュメントのdmdのバージョン: 2.109.1
最新のdmdのバージョン: 2.111.0 ダウンロード
翻訳日付:
HTML生成日時:
編集者: dokutoku