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

std.experimental.allocator.common

std.experimental.allocator のユーティリティと補助的な成果物。 このモジュールは直接使用されるべきではない。 stdのより適切な部分に移行される。
Authors:
Andrei Alexandrescu, Timon Gehr (Ternary)
enum auto isAllocator(A);
A がアロケータであれば、true である。
Examples:
import std.experimental.allocator.building_blocks.null_allocator : NullAllocator;
import std.experimental.allocator.mallocator : Mallocator;
import std.experimental.allocator.gc_allocator : GCAllocator;
import std.experimental.allocator.mmap_allocator : MmapAllocator;
static assert(isAllocator!NullAllocator);
static assert(isAllocator!Mallocator);
static assert(isAllocator!GCAllocator);
static assert(isAllocator!MmapAllocator);
static assert(!isAllocator!int);
template stateSize(T)
型のオブジェクトを保持するために割り当てが必要な状態のサイズをバイト単位で返す。 TstateSize!Tは、structの場合はゼロである。 はゼロである。
enum auto hasStaticallyKnownAlignment(Allocator);
Allocator のアライメントがコンパイル時に既知の場合はtrue を返す; そうでない場合はfalse を返す。
enum ulong chooseAtRuntime;
chooseAtRuntimesize_t 型のコンパイル時定数である。 型のコンパイル時定数である。 を実行時に延期することを意味する。例えば、BitmappedBlock!(Allocator, 4096) (詳細は後述する。 はブロック・サイズが4096バイトのブロック・アロケータを定義している。 BitmappedBlock!(Allocator, chooseAtRuntime) フィールドを持つブロック・アロケータを定義している。 フィールドを持つブロック・アロケータを定義している。
enum ulong unbounded;
unboundedsize_t 型のコンパイル時定数である。 型のコンパイル時定数である。 である。例:Freelist (詳細は後述する)は、フリー・ファイルの数を制限する maxNodes パラメータは、フリーリストの項目数を制限する。もし unbounded maxNodesが渡された場合、制限はなく、ノード数のチェックも行われない。 をチェックしない。
enum uint platformAlignment;
現在のプラットフォーム上で、どのようなDオブジェクトのアロケーションにも対応することが保証されているアライメントである。 アラインメントである。
size_t goodAllocSize(A)(auto ref A a, size_t n);
デフォルトの良好なサイズの割り当ては、以下のように推論される。 nに切り上げられる。 のアライメントに切り上げられる。
bool reallocate(Allocator)(ref Allocator a, ref void[] b, size_t s);
デフォルトの reallocate関数は、まずexpand の使用を試みる。Allocator.expand が定義されていないか、false を返す、 reallocate を返す場合、適切なサイズの新しいメモリブロックを確保し、古いブロックから新しいブロックにデータをコピーする。 ブロックから新しいブロックにデータをコピーする。最後に、Allocatordeallocate を定義している場合、reallocate はそれを使用して古いメモリ・ブロックを解放する。
reallocateを使おうとはしない。 Allocator.reallocateたとえ が定義されていても使おうとしない。これは、アロケータが自身の の実装の中で内部的に使うことができる。 reallocate.
bool alignedReallocate(Allocator)(ref Allocator alloc, ref void[] b, size_t s, uint a)
if (hasMember!(Allocator, "alignedAllocate"));
デフォルトの alignedReallocate関数は、まずexpand の使用を試みる。 Allocator.expand が定義されていないか、false を返した場合、alignedReallocate は適切なサイズの新しいメモリブロックを確保し、古いブロックから新しいブロックにデータをコピーする。 古いブロックから新しいブロックにデータをコピーする。最後にAllocator が定義されている場合、deallocatealignedReallocateが定義されていれば、それを使って古いメモリ ブロックを解放する。
alignedReallocateが定義されていても、Allocator.reallocate を使おうとはしない。 を使用しようとしない。これは意図的なもので、アロケータが自分自身の実装の中で内部的に使うためである。 reallocateの実装内で使用できるようにするためである。
string forwardToMember(string member, string[] funs...);
の各メソッドを funs(に転送する。 member.